| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/paint/paint_op_buffer.h" | 5 #include "cc/paint/paint_op_buffer.h" |
| 6 | 6 |
| 7 #include "cc/paint/display_item_list.h" | 7 #include "cc/paint/display_item_list.h" |
| 8 #include "cc/paint/paint_record.h" | 8 #include "cc/paint/paint_record.h" |
| 9 #include "third_party/skia/include/core/SkAnnotation.h" | 9 #include "third_party/skia/include/core/SkAnnotation.h" |
| 10 | 10 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 39 M(SaveOp) \ | 39 M(SaveOp) \ |
| 40 M(SaveLayerOp) \ | 40 M(SaveLayerOp) \ |
| 41 M(SaveLayerAlphaOp) \ | 41 M(SaveLayerAlphaOp) \ |
| 42 M(ScaleOp) \ | 42 M(ScaleOp) \ |
| 43 M(SetMatrixOp) \ | 43 M(SetMatrixOp) \ |
| 44 M(TranslateOp) | 44 M(TranslateOp) |
| 45 | 45 |
| 46 using RasterFunction = void (*)(const PaintOp* op, | 46 using RasterFunction = void (*)(const PaintOp* op, |
| 47 SkCanvas* canvas, | 47 SkCanvas* canvas, |
| 48 const SkMatrix& original_ctm); | 48 const SkMatrix& original_ctm); |
| 49 using RasterWithFlagsFunction = void (*)(const PaintOpWithFlags* op, |
| 50 const PaintFlags* flags, |
| 51 SkCanvas* canvas, |
| 52 const SkMatrix& original_ctm); |
| 49 | 53 |
| 50 NOINLINE static void RasterWithAlphaInternal(RasterFunction raster_fn, | 54 NOINLINE static void RasterWithAlphaInternal(RasterFunction raster_fn, |
| 51 const PaintOp* op, | 55 const PaintOp* op, |
| 52 SkCanvas* canvas, | 56 SkCanvas* canvas, |
| 53 uint8_t alpha) { | 57 uint8_t alpha) { |
| 54 // TODO(enne): is it ok to just drop the bounds here? | 58 // TODO(enne): is it ok to just drop the bounds here? |
| 55 canvas->saveLayerAlpha(nullptr, alpha); | 59 canvas->saveLayerAlpha(nullptr, alpha); |
| 56 SkMatrix unused_matrix; | 60 SkMatrix unused_matrix; |
| 57 raster_fn(op, canvas, unused_matrix); | 61 raster_fn(op, canvas, unused_matrix); |
| 58 canvas->restore(); | 62 canvas->restore(); |
| 59 } | 63 } |
| 60 | 64 |
| 61 // Helper template to share common code for RasterWithAlpha when paint ops | 65 // Helper template to share common code for RasterWithAlpha when paint ops |
| 62 // have or don't have PaintFlags. | 66 // have or don't have PaintFlags. |
| 63 template <typename T, bool HasFlags> | 67 template <typename T, bool HasFlags> |
| 64 struct Rasterizer { | 68 struct Rasterizer { |
| 65 static void RasterWithAlpha(const T* op, SkCanvas* canvas, uint8_t alpha) { | 69 static void RasterWithAlpha(const T* op, SkCanvas* canvas, uint8_t alpha) { |
| 66 static_assert( | 70 static_assert( |
| 67 !T::kHasPaintFlags, | 71 !T::kHasPaintFlags, |
| 68 "This function should not be used for a PaintOp that has PaintFlags"); | 72 "This function should not be used for a PaintOp that has PaintFlags"); |
| 69 DCHECK(T::kIsDrawOp); | 73 DCHECK(T::kIsDrawOp); |
| 70 RasterWithAlphaInternal(&T::Raster, op, canvas, alpha); | 74 RasterWithAlphaInternal(&T::Raster, op, canvas, alpha); |
| 71 } | 75 } |
| 72 }; | 76 }; |
| 73 | 77 |
| 74 NOINLINE static void RasterWithAlphaInternalForFlags(RasterFunction raster_fn, | 78 NOINLINE static void RasterWithAlphaInternalForFlags( |
| 75 const PaintOpWithFlags* op, | 79 RasterWithFlagsFunction raster_fn, |
| 76 SkCanvas* canvas, | 80 const PaintOpWithFlags* op, |
| 77 uint8_t alpha) { | 81 SkCanvas* canvas, |
| 82 uint8_t alpha) { |
| 78 SkMatrix unused_matrix; | 83 SkMatrix unused_matrix; |
| 79 if (alpha == 255) { | 84 if (alpha == 255) { |
| 80 raster_fn(op, canvas, unused_matrix); | 85 raster_fn(op, &op->flags, canvas, unused_matrix); |
| 81 } else if (op->flags.SupportsFoldingAlpha()) { | 86 } else if (op->flags.SupportsFoldingAlpha()) { |
| 82 PaintOpWithFlags* mutable_op = const_cast<PaintOpWithFlags*>(op); | 87 PaintFlags flags = op->flags; |
| 83 uint8_t flags_alpha = op->flags.getAlpha(); | 88 flags.setAlpha(SkMulDiv255Round(flags.getAlpha(), alpha)); |
| 84 mutable_op->flags.setAlpha(SkMulDiv255Round(flags_alpha, alpha)); | 89 raster_fn(op, &flags, canvas, unused_matrix); |
| 85 raster_fn(op, canvas, unused_matrix); | |
| 86 mutable_op->flags.setAlpha(flags_alpha); | |
| 87 } else { | 90 } else { |
| 88 canvas->saveLayerAlpha(nullptr, alpha); | 91 canvas->saveLayerAlpha(nullptr, alpha); |
| 89 raster_fn(op, canvas, unused_matrix); | 92 raster_fn(op, &op->flags, canvas, unused_matrix); |
| 90 canvas->restore(); | 93 canvas->restore(); |
| 91 } | 94 } |
| 92 } | 95 } |
| 93 | 96 |
| 94 template <typename T> | 97 template <typename T> |
| 95 struct Rasterizer<T, true> { | 98 struct Rasterizer<T, true> { |
| 96 static void RasterWithAlpha(const T* op, SkCanvas* canvas, uint8_t alpha) { | 99 static void RasterWithAlpha(const T* op, SkCanvas* canvas, uint8_t alpha) { |
| 97 static_assert(T::kHasPaintFlags, | 100 static_assert(T::kHasPaintFlags, |
| 98 "This function expects the PaintOp to have PaintFlags"); | 101 "This function expects the PaintOp to have PaintFlags"); |
| 99 DCHECK(T::kIsDrawOp); | 102 DCHECK(T::kIsDrawOp); |
| 100 RasterWithAlphaInternalForFlags(&T::Raster, op, canvas, alpha); | 103 RasterWithAlphaInternalForFlags(&T::RasterWithFlags, op, canvas, alpha); |
| 101 } | 104 } |
| 102 }; | 105 }; |
| 103 | 106 |
| 104 template <> | 107 template <> |
| 105 struct Rasterizer<DrawRecordOp, false> { | 108 struct Rasterizer<DrawRecordOp, false> { |
| 106 static void RasterWithAlpha(const DrawRecordOp* op, | 109 static void RasterWithAlpha(const DrawRecordOp* op, |
| 107 SkCanvas* canvas, | 110 SkCanvas* canvas, |
| 108 uint8_t alpha) { | 111 uint8_t alpha) { |
| 109 // This "looking into records" optimization is done here instead of | 112 // This "looking into records" optimization is done here instead of |
| 110 // in the PaintOpBuffer::Raster function as DisplayItemList calls | 113 // in the PaintOpBuffer::Raster function as DisplayItemList calls |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 canvas->clipRRect(op->rrect, op->op, op->antialias); | 229 canvas->clipRRect(op->rrect, op->op, op->antialias); |
| 227 } | 230 } |
| 228 | 231 |
| 229 void ConcatOp::Raster(const PaintOp* base_op, | 232 void ConcatOp::Raster(const PaintOp* base_op, |
| 230 SkCanvas* canvas, | 233 SkCanvas* canvas, |
| 231 const SkMatrix& original_ctm) { | 234 const SkMatrix& original_ctm) { |
| 232 auto* op = static_cast<const ConcatOp*>(base_op); | 235 auto* op = static_cast<const ConcatOp*>(base_op); |
| 233 canvas->concat(op->matrix); | 236 canvas->concat(op->matrix); |
| 234 } | 237 } |
| 235 | 238 |
| 236 void DrawArcOp::Raster(const PaintOp* base_op, | 239 void DrawArcOp::RasterWithFlags(const PaintOpWithFlags* base_op, |
| 237 SkCanvas* canvas, | 240 const PaintFlags* flags, |
| 238 const SkMatrix& original_ctm) { | 241 SkCanvas* canvas, |
| 242 const SkMatrix& original_ctm) { |
| 239 auto* op = static_cast<const DrawArcOp*>(base_op); | 243 auto* op = static_cast<const DrawArcOp*>(base_op); |
| 240 canvas->drawArc(op->oval, op->start_angle, op->sweep_angle, op->use_center, | 244 canvas->drawArc(op->oval, op->start_angle, op->sweep_angle, op->use_center, |
| 241 ToSkPaint(op->flags)); | 245 ToSkPaint(*flags)); |
| 242 } | 246 } |
| 243 | 247 |
| 244 void DrawCircleOp::Raster(const PaintOp* base_op, | 248 void DrawCircleOp::RasterWithFlags(const PaintOpWithFlags* base_op, |
| 245 SkCanvas* canvas, | 249 const PaintFlags* flags, |
| 246 const SkMatrix& original_ctm) { | 250 SkCanvas* canvas, |
| 251 const SkMatrix& original_ctm) { |
| 247 auto* op = static_cast<const DrawCircleOp*>(base_op); | 252 auto* op = static_cast<const DrawCircleOp*>(base_op); |
| 248 canvas->drawCircle(op->cx, op->cy, op->radius, ToSkPaint(op->flags)); | 253 canvas->drawCircle(op->cx, op->cy, op->radius, ToSkPaint(*flags)); |
| 249 } | 254 } |
| 250 | 255 |
| 251 void DrawColorOp::Raster(const PaintOp* base_op, | 256 void DrawColorOp::Raster(const PaintOp* base_op, |
| 252 SkCanvas* canvas, | 257 SkCanvas* canvas, |
| 253 const SkMatrix& original_ctm) { | 258 const SkMatrix& original_ctm) { |
| 254 auto* op = static_cast<const DrawColorOp*>(base_op); | 259 auto* op = static_cast<const DrawColorOp*>(base_op); |
| 255 canvas->drawColor(op->color, op->mode); | 260 canvas->drawColor(op->color, op->mode); |
| 256 } | 261 } |
| 257 | 262 |
| 258 void DrawDisplayItemListOp::Raster(const PaintOp* base_op, | 263 void DrawDisplayItemListOp::Raster(const PaintOp* base_op, |
| 259 SkCanvas* canvas, | 264 SkCanvas* canvas, |
| 260 const SkMatrix& original_ctm) { | 265 const SkMatrix& original_ctm) { |
| 261 auto* op = static_cast<const DrawDisplayItemListOp*>(base_op); | 266 auto* op = static_cast<const DrawDisplayItemListOp*>(base_op); |
| 262 op->list->Raster(canvas, nullptr); | 267 op->list->Raster(canvas, nullptr); |
| 263 } | 268 } |
| 264 | 269 |
| 265 void DrawDRRectOp::Raster(const PaintOp* base_op, | 270 void DrawDRRectOp::RasterWithFlags(const PaintOpWithFlags* base_op, |
| 266 SkCanvas* canvas, | 271 const PaintFlags* flags, |
| 267 const SkMatrix& original_ctm) { | 272 SkCanvas* canvas, |
| 273 const SkMatrix& original_ctm) { |
| 268 auto* op = static_cast<const DrawDRRectOp*>(base_op); | 274 auto* op = static_cast<const DrawDRRectOp*>(base_op); |
| 269 canvas->drawDRRect(op->outer, op->inner, ToSkPaint(op->flags)); | 275 canvas->drawDRRect(op->outer, op->inner, ToSkPaint(*flags)); |
| 270 } | 276 } |
| 271 | 277 |
| 272 void DrawImageOp::Raster(const PaintOp* base_op, | 278 void DrawImageOp::RasterWithFlags(const PaintOpWithFlags* base_op, |
| 273 SkCanvas* canvas, | 279 const PaintFlags* flags, |
| 274 const SkMatrix& original_ctm) { | 280 SkCanvas* canvas, |
| 281 const SkMatrix& original_ctm) { |
| 275 auto* op = static_cast<const DrawImageOp*>(base_op); | 282 auto* op = static_cast<const DrawImageOp*>(base_op); |
| 276 canvas->drawImage(op->image.sk_image().get(), op->left, op->top, | 283 canvas->drawImage(op->image.sk_image().get(), op->left, op->top, |
| 277 ToSkPaint(&op->flags)); | 284 ToSkPaint(flags)); |
| 278 } | 285 } |
| 279 | 286 |
| 280 void DrawImageRectOp::Raster(const PaintOp* base_op, | 287 void DrawImageRectOp::RasterWithFlags(const PaintOpWithFlags* base_op, |
| 281 SkCanvas* canvas, | 288 const PaintFlags* flags, |
| 282 const SkMatrix& original_ctm) { | 289 SkCanvas* canvas, |
| 290 const SkMatrix& original_ctm) { |
| 283 auto* op = static_cast<const DrawImageRectOp*>(base_op); | 291 auto* op = static_cast<const DrawImageRectOp*>(base_op); |
| 284 // TODO(enne): Probably PaintCanvas should just use the skia enum directly. | 292 // TODO(enne): Probably PaintCanvas should just use the skia enum directly. |
| 285 SkCanvas::SrcRectConstraint skconstraint = | 293 SkCanvas::SrcRectConstraint skconstraint = |
| 286 static_cast<SkCanvas::SrcRectConstraint>(op->constraint); | 294 static_cast<SkCanvas::SrcRectConstraint>(op->constraint); |
| 287 canvas->drawImageRect(op->image.sk_image().get(), op->src, op->dst, | 295 canvas->drawImageRect(op->image.sk_image().get(), op->src, op->dst, |
| 288 ToSkPaint(&op->flags), skconstraint); | 296 ToSkPaint(flags), skconstraint); |
| 289 } | 297 } |
| 290 | 298 |
| 291 void DrawIRectOp::Raster(const PaintOp* base_op, | 299 void DrawIRectOp::RasterWithFlags(const PaintOpWithFlags* base_op, |
| 292 SkCanvas* canvas, | 300 const PaintFlags* flags, |
| 293 const SkMatrix& original_ctm) { | 301 SkCanvas* canvas, |
| 302 const SkMatrix& original_ctm) { |
| 294 auto* op = static_cast<const DrawIRectOp*>(base_op); | 303 auto* op = static_cast<const DrawIRectOp*>(base_op); |
| 295 canvas->drawIRect(op->rect, ToSkPaint(op->flags)); | 304 canvas->drawIRect(op->rect, ToSkPaint(*flags)); |
| 296 } | 305 } |
| 297 | 306 |
| 298 void DrawLineOp::Raster(const PaintOp* base_op, | 307 void DrawLineOp::RasterWithFlags(const PaintOpWithFlags* base_op, |
| 299 SkCanvas* canvas, | 308 const PaintFlags* flags, |
| 300 const SkMatrix& original_ctm) { | 309 SkCanvas* canvas, |
| 310 const SkMatrix& original_ctm) { |
| 301 auto* op = static_cast<const DrawLineOp*>(base_op); | 311 auto* op = static_cast<const DrawLineOp*>(base_op); |
| 302 canvas->drawLine(op->x0, op->y0, op->x1, op->y1, ToSkPaint(op->flags)); | 312 canvas->drawLine(op->x0, op->y0, op->x1, op->y1, ToSkPaint(*flags)); |
| 303 } | 313 } |
| 304 | 314 |
| 305 void DrawOvalOp::Raster(const PaintOp* base_op, | 315 void DrawOvalOp::RasterWithFlags(const PaintOpWithFlags* base_op, |
| 306 SkCanvas* canvas, | 316 const PaintFlags* flags, |
| 307 const SkMatrix& original_ctm) { | 317 SkCanvas* canvas, |
| 318 const SkMatrix& original_ctm) { |
| 308 auto* op = static_cast<const DrawOvalOp*>(base_op); | 319 auto* op = static_cast<const DrawOvalOp*>(base_op); |
| 309 canvas->drawOval(op->oval, ToSkPaint(op->flags)); | 320 canvas->drawOval(op->oval, ToSkPaint(*flags)); |
| 310 } | 321 } |
| 311 | 322 |
| 312 void DrawPathOp::Raster(const PaintOp* base_op, | 323 void DrawPathOp::RasterWithFlags(const PaintOpWithFlags* base_op, |
| 313 SkCanvas* canvas, | 324 const PaintFlags* flags, |
| 314 const SkMatrix& original_ctm) { | 325 SkCanvas* canvas, |
| 326 const SkMatrix& original_ctm) { |
| 315 auto* op = static_cast<const DrawPathOp*>(base_op); | 327 auto* op = static_cast<const DrawPathOp*>(base_op); |
| 316 canvas->drawPath(op->path, ToSkPaint(op->flags)); | 328 canvas->drawPath(op->path, ToSkPaint(*flags)); |
| 317 } | 329 } |
| 318 | 330 |
| 319 void DrawPosTextOp::Raster(const PaintOp* base_op, | 331 void DrawPosTextOp::RasterWithFlags(const PaintOpWithFlags* base_op, |
| 320 SkCanvas* canvas, | 332 const PaintFlags* flags, |
| 321 const SkMatrix& original_ctm) { | 333 SkCanvas* canvas, |
| 334 const SkMatrix& original_ctm) { |
| 322 auto* op = static_cast<const DrawPosTextOp*>(base_op); | 335 auto* op = static_cast<const DrawPosTextOp*>(base_op); |
| 323 canvas->drawPosText(op->GetData(), op->bytes, op->GetArray(), | 336 canvas->drawPosText(op->GetData(), op->bytes, op->GetArray(), |
| 324 ToSkPaint(op->flags)); | 337 ToSkPaint(*flags)); |
| 325 } | 338 } |
| 326 | 339 |
| 327 void DrawRecordOp::Raster(const PaintOp* base_op, | 340 void DrawRecordOp::Raster(const PaintOp* base_op, |
| 328 SkCanvas* canvas, | 341 SkCanvas* canvas, |
| 329 const SkMatrix& original_ctm) { | 342 const SkMatrix& original_ctm) { |
| 330 auto* op = static_cast<const DrawRecordOp*>(base_op); | 343 auto* op = static_cast<const DrawRecordOp*>(base_op); |
| 331 op->record->playback(canvas); | 344 op->record->playback(canvas); |
| 332 } | 345 } |
| 333 | 346 |
| 334 void DrawRectOp::Raster(const PaintOp* base_op, | 347 void DrawRectOp::RasterWithFlags(const PaintOpWithFlags* base_op, |
| 335 SkCanvas* canvas, | 348 const PaintFlags* flags, |
| 336 const SkMatrix& original_ctm) { | 349 SkCanvas* canvas, |
| 350 const SkMatrix& original_ctm) { |
| 337 auto* op = static_cast<const DrawRectOp*>(base_op); | 351 auto* op = static_cast<const DrawRectOp*>(base_op); |
| 338 canvas->drawRect(op->rect, ToSkPaint(op->flags)); | 352 canvas->drawRect(op->rect, ToSkPaint(*flags)); |
| 339 } | 353 } |
| 340 | 354 |
| 341 void DrawRRectOp::Raster(const PaintOp* base_op, | 355 void DrawRRectOp::RasterWithFlags(const PaintOpWithFlags* base_op, |
| 342 SkCanvas* canvas, | 356 const PaintFlags* flags, |
| 343 const SkMatrix& original_ctm) { | 357 SkCanvas* canvas, |
| 358 const SkMatrix& original_ctm) { |
| 344 auto* op = static_cast<const DrawRRectOp*>(base_op); | 359 auto* op = static_cast<const DrawRRectOp*>(base_op); |
| 345 canvas->drawRRect(op->rrect, ToSkPaint(op->flags)); | 360 canvas->drawRRect(op->rrect, ToSkPaint(*flags)); |
| 346 } | 361 } |
| 347 | 362 |
| 348 void DrawTextOp::Raster(const PaintOp* base_op, | 363 void DrawTextOp::RasterWithFlags(const PaintOpWithFlags* base_op, |
| 349 SkCanvas* canvas, | 364 const PaintFlags* flags, |
| 350 const SkMatrix& original_ctm) { | 365 SkCanvas* canvas, |
| 366 const SkMatrix& original_ctm) { |
| 351 auto* op = static_cast<const DrawTextOp*>(base_op); | 367 auto* op = static_cast<const DrawTextOp*>(base_op); |
| 352 canvas->drawText(op->GetData(), op->bytes, op->x, op->y, | 368 canvas->drawText(op->GetData(), op->bytes, op->x, op->y, ToSkPaint(*flags)); |
| 353 ToSkPaint(op->flags)); | |
| 354 } | 369 } |
| 355 | 370 |
| 356 void DrawTextBlobOp::Raster(const PaintOp* base_op, | 371 void DrawTextBlobOp::RasterWithFlags(const PaintOpWithFlags* base_op, |
| 357 SkCanvas* canvas, | 372 const PaintFlags* flags, |
| 358 const SkMatrix& original_ctm) { | 373 SkCanvas* canvas, |
| 374 const SkMatrix& original_ctm) { |
| 359 auto* op = static_cast<const DrawTextBlobOp*>(base_op); | 375 auto* op = static_cast<const DrawTextBlobOp*>(base_op); |
| 360 canvas->drawTextBlob(op->blob.get(), op->x, op->y, ToSkPaint(op->flags)); | 376 canvas->drawTextBlob(op->blob.get(), op->x, op->y, ToSkPaint(*flags)); |
| 361 } | 377 } |
| 362 | 378 |
| 363 void RestoreOp::Raster(const PaintOp* base_op, | 379 void RestoreOp::Raster(const PaintOp* base_op, |
| 364 SkCanvas* canvas, | 380 SkCanvas* canvas, |
| 365 const SkMatrix& original_ctm) { | 381 const SkMatrix& original_ctm) { |
| 366 canvas->restore(); | 382 canvas->restore(); |
| 367 } | 383 } |
| 368 | 384 |
| 369 void RotateOp::Raster(const PaintOp* base_op, | 385 void RotateOp::Raster(const PaintOp* base_op, |
| 370 SkCanvas* canvas, | 386 SkCanvas* canvas, |
| 371 const SkMatrix& original_ctm) { | 387 const SkMatrix& original_ctm) { |
| 372 auto* op = static_cast<const RotateOp*>(base_op); | 388 auto* op = static_cast<const RotateOp*>(base_op); |
| 373 canvas->rotate(op->degrees); | 389 canvas->rotate(op->degrees); |
| 374 } | 390 } |
| 375 | 391 |
| 376 void SaveOp::Raster(const PaintOp* base_op, | 392 void SaveOp::Raster(const PaintOp* base_op, |
| 377 SkCanvas* canvas, | 393 SkCanvas* canvas, |
| 378 const SkMatrix& original_ctm) { | 394 const SkMatrix& original_ctm) { |
| 379 canvas->save(); | 395 canvas->save(); |
| 380 } | 396 } |
| 381 | 397 |
| 382 void SaveLayerOp::Raster(const PaintOp* base_op, | 398 void SaveLayerOp::RasterWithFlags(const PaintOpWithFlags* base_op, |
| 383 SkCanvas* canvas, | 399 const PaintFlags* flags, |
| 384 const SkMatrix& original_ctm) { | 400 SkCanvas* canvas, |
| 401 const SkMatrix& original_ctm) { |
| 385 auto* op = static_cast<const SaveLayerOp*>(base_op); | 402 auto* op = static_cast<const SaveLayerOp*>(base_op); |
| 386 // See PaintOp::kUnsetRect | 403 // See PaintOp::kUnsetRect |
| 387 bool unset = op->bounds.left() == SK_ScalarInfinity; | 404 bool unset = op->bounds.left() == SK_ScalarInfinity; |
| 388 | 405 |
| 389 canvas->saveLayer(unset ? nullptr : &op->bounds, ToSkPaint(&op->flags)); | 406 canvas->saveLayer(unset ? nullptr : &op->bounds, ToSkPaint(flags)); |
| 390 } | 407 } |
| 391 | 408 |
| 392 void SaveLayerAlphaOp::Raster(const PaintOp* base_op, | 409 void SaveLayerAlphaOp::Raster(const PaintOp* base_op, |
| 393 SkCanvas* canvas, | 410 SkCanvas* canvas, |
| 394 const SkMatrix& original_ctm) { | 411 const SkMatrix& original_ctm) { |
| 395 auto* op = static_cast<const SaveLayerAlphaOp*>(base_op); | 412 auto* op = static_cast<const SaveLayerAlphaOp*>(base_op); |
| 396 // See PaintOp::kUnsetRect | 413 // See PaintOp::kUnsetRect |
| 397 bool unset = op->bounds.left() == SK_ScalarInfinity; | 414 bool unset = op->bounds.left() == SK_ScalarInfinity; |
| 398 canvas->saveLayerAlpha(unset ? nullptr : &op->bounds, op->alpha); | 415 canvas->saveLayerAlpha(unset ? nullptr : &op->bounds, op->alpha); |
| 399 } | 416 } |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 672 return std::make_pair(op, skip); | 689 return std::make_pair(op, skip); |
| 673 } | 690 } |
| 674 | 691 |
| 675 void PaintOpBuffer::ShrinkToFit() { | 692 void PaintOpBuffer::ShrinkToFit() { |
| 676 if (!used_ || used_ == reserved_) | 693 if (!used_ || used_ == reserved_) |
| 677 return; | 694 return; |
| 678 ReallocBuffer(used_); | 695 ReallocBuffer(used_); |
| 679 } | 696 } |
| 680 | 697 |
| 681 } // namespace cc | 698 } // namespace cc |
| OLD | NEW |