| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/playback/compositing_display_item.h" | 5 #include "cc/playback/compositing_display_item.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
| 11 #include "base/trace_event/trace_event_argument.h" | 11 #include "base/trace_event/trace_event_argument.h" |
| 12 #include "cc/proto/display_item.pb.h" | 12 #include "cc/proto/display_item.pb.h" |
| 13 #include "cc/proto/gfx_conversions.h" | 13 #include "cc/proto/gfx_conversions.h" |
| 14 #include "cc/proto/skia_conversions.h" | 14 #include "cc/proto/skia_conversions.h" |
| 15 #include "third_party/skia/include/core/SkCanvas.h" | 15 #include "third_party/skia/include/core/SkCanvas.h" |
| 16 #include "third_party/skia/include/core/SkData.h" | 16 #include "third_party/skia/include/core/SkData.h" |
| 17 #include "third_party/skia/include/core/SkFlattenable.h" | 17 #include "third_party/skia/include/core/SkFlattenable.h" |
| 18 #include "third_party/skia/include/core/SkFlattenableSerialization.h" | 18 #include "third_party/skia/include/core/SkFlattenableSerialization.h" |
| 19 #include "third_party/skia/include/core/SkPaint.h" | 19 #include "third_party/skia/include/core/SkPaint.h" |
| 20 #include "third_party/skia/include/core/SkXfermode.h" | 20 #include "third_party/skia/include/core/SkXfermode.h" |
| 21 #include "ui/gfx/skia_util.h" | 21 #include "ui/gfx/skia_util.h" |
| 22 | 22 |
| 23 namespace cc { | 23 namespace cc { |
| 24 class ImageSerializationProcessor; | 24 class ImageSerializationProcessor; |
| 25 | 25 |
| 26 CompositingDisplayItem::CompositingDisplayItem( | 26 CompositingDisplayItem::CompositingDisplayItem( |
| 27 uint8_t alpha, | 27 uint8_t alpha, |
| 28 SkXfermode::Mode xfermode, | 28 SkXfermode::Mode xfermode, |
| 29 SkRect* bounds, | 29 SkRect* bounds, |
| 30 skia::RefPtr<SkColorFilter> cf, | 30 sk_sp<SkColorFilter> cf, |
| 31 bool lcd_text_requires_opaque_layer) { | 31 bool lcd_text_requires_opaque_layer) { |
| 32 SetNew(alpha, xfermode, bounds, std::move(cf), | 32 SetNew(alpha, xfermode, bounds, std::move(cf), |
| 33 lcd_text_requires_opaque_layer); | 33 lcd_text_requires_opaque_layer); |
| 34 } | 34 } |
| 35 | 35 |
| 36 CompositingDisplayItem::CompositingDisplayItem( | 36 CompositingDisplayItem::CompositingDisplayItem( |
| 37 const proto::DisplayItem& proto) { | 37 const proto::DisplayItem& proto) { |
| 38 DCHECK_EQ(proto::DisplayItem::Type_Compositing, proto.type()); | 38 DCHECK_EQ(proto::DisplayItem::Type_Compositing, proto.type()); |
| 39 | 39 |
| 40 const proto::CompositingDisplayItem& details = proto.compositing_item(); | 40 const proto::CompositingDisplayItem& details = proto.compositing_item(); |
| 41 uint8_t alpha = static_cast<uint8_t>(details.alpha()); | 41 uint8_t alpha = static_cast<uint8_t>(details.alpha()); |
| 42 SkXfermode::Mode xfermode = SkXfermodeModeFromProto(details.mode()); | 42 SkXfermode::Mode xfermode = SkXfermodeModeFromProto(details.mode()); |
| 43 scoped_ptr<SkRect> bounds; | 43 scoped_ptr<SkRect> bounds; |
| 44 if (details.has_bounds()) { | 44 if (details.has_bounds()) { |
| 45 bounds.reset( | 45 bounds.reset( |
| 46 new SkRect(gfx::RectFToSkRect(ProtoToRectF(details.bounds())))); | 46 new SkRect(gfx::RectFToSkRect(ProtoToRectF(details.bounds())))); |
| 47 } | 47 } |
| 48 | 48 |
| 49 skia::RefPtr<SkColorFilter> filter; | 49 sk_sp<SkColorFilter> filter; |
| 50 if (details.has_color_filter()) { | 50 if (details.has_color_filter()) { |
| 51 SkFlattenable* flattenable = SkValidatingDeserializeFlattenable( | 51 SkFlattenable* flattenable = SkValidatingDeserializeFlattenable( |
| 52 details.color_filter().c_str(), details.color_filter().size(), | 52 details.color_filter().c_str(), details.color_filter().size(), |
| 53 SkColorFilter::GetFlattenableType()); | 53 SkColorFilter::GetFlattenableType()); |
| 54 filter = skia::AdoptRef(static_cast<SkColorFilter*>(flattenable)); | 54 filter.reset(static_cast<SkColorFilter*>(flattenable)); |
| 55 } | 55 } |
| 56 | 56 |
| 57 bool lcd_text_requires_opaque_layer = | 57 bool lcd_text_requires_opaque_layer = |
| 58 details.lcd_text_requires_opaque_layer(); | 58 details.lcd_text_requires_opaque_layer(); |
| 59 | 59 |
| 60 SetNew(alpha, xfermode, bounds.get(), std::move(filter), | 60 SetNew(alpha, xfermode, bounds.get(), std::move(filter), |
| 61 lcd_text_requires_opaque_layer); | 61 lcd_text_requires_opaque_layer); |
| 62 } | 62 } |
| 63 | 63 |
| 64 CompositingDisplayItem::~CompositingDisplayItem() { | 64 CompositingDisplayItem::~CompositingDisplayItem() { |
| 65 } | 65 } |
| 66 | 66 |
| 67 void CompositingDisplayItem::SetNew(uint8_t alpha, | 67 void CompositingDisplayItem::SetNew(uint8_t alpha, |
| 68 SkXfermode::Mode xfermode, | 68 SkXfermode::Mode xfermode, |
| 69 SkRect* bounds, | 69 SkRect* bounds, |
| 70 skia::RefPtr<SkColorFilter> cf, | 70 sk_sp<SkColorFilter> cf, |
| 71 bool lcd_text_requires_opaque_layer) { | 71 bool lcd_text_requires_opaque_layer) { |
| 72 alpha_ = alpha; | 72 alpha_ = alpha; |
| 73 xfermode_ = xfermode; | 73 xfermode_ = xfermode; |
| 74 has_bounds_ = !!bounds; | 74 has_bounds_ = !!bounds; |
| 75 if (bounds) | 75 if (bounds) |
| 76 bounds_ = SkRect(*bounds); | 76 bounds_ = SkRect(*bounds); |
| 77 color_filter_ = std::move(cf); | 77 color_filter_ = std::move(cf); |
| 78 lcd_text_requires_opaque_layer_ = lcd_text_requires_opaque_layer; | 78 lcd_text_requires_opaque_layer_ = lcd_text_requires_opaque_layer; |
| 79 } | 79 } |
| 80 | 80 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 99 details->set_lcd_text_requires_opaque_layer(lcd_text_requires_opaque_layer_); | 99 details->set_lcd_text_requires_opaque_layer(lcd_text_requires_opaque_layer_); |
| 100 } | 100 } |
| 101 | 101 |
| 102 void CompositingDisplayItem::Raster( | 102 void CompositingDisplayItem::Raster( |
| 103 SkCanvas* canvas, | 103 SkCanvas* canvas, |
| 104 const gfx::Rect& canvas_target_playback_rect, | 104 const gfx::Rect& canvas_target_playback_rect, |
| 105 SkPicture::AbortCallback* callback) const { | 105 SkPicture::AbortCallback* callback) const { |
| 106 SkPaint paint; | 106 SkPaint paint; |
| 107 paint.setXfermodeMode(xfermode_); | 107 paint.setXfermodeMode(xfermode_); |
| 108 paint.setAlpha(alpha_); | 108 paint.setAlpha(alpha_); |
| 109 paint.setColorFilter(color_filter_.get()); | 109 paint.setColorFilter(color_filter_); |
| 110 const SkRect* bounds = has_bounds_ ? &bounds_ : nullptr; | 110 const SkRect* bounds = has_bounds_ ? &bounds_ : nullptr; |
| 111 if (lcd_text_requires_opaque_layer_) | 111 if (lcd_text_requires_opaque_layer_) |
| 112 canvas->saveLayer(bounds, &paint); | 112 canvas->saveLayer(bounds, &paint); |
| 113 else | 113 else |
| 114 canvas->saveLayerPreserveLCDTextRequests(bounds, &paint); | 114 canvas->saveLayerPreserveLCDTextRequests(bounds, &paint); |
| 115 } | 115 } |
| 116 | 116 |
| 117 void CompositingDisplayItem::AsValueInto( | 117 void CompositingDisplayItem::AsValueInto( |
| 118 const gfx::Rect& visual_rect, | 118 const gfx::Rect& visual_rect, |
| 119 base::trace_event::TracedValue* array) const { | 119 base::trace_event::TracedValue* array) const { |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 array->AppendString( | 163 array->AppendString( |
| 164 base::StringPrintf("EndCompositingDisplayItem visualRect: [%s]", | 164 base::StringPrintf("EndCompositingDisplayItem visualRect: [%s]", |
| 165 visual_rect.ToString().c_str())); | 165 visual_rect.ToString().c_str())); |
| 166 } | 166 } |
| 167 | 167 |
| 168 size_t EndCompositingDisplayItem::ExternalMemoryUsage() const { | 168 size_t EndCompositingDisplayItem::ExternalMemoryUsage() const { |
| 169 return 0; | 169 return 0; |
| 170 } | 170 } |
| 171 | 171 |
| 172 } // namespace cc | 172 } // namespace cc |
| OLD | NEW |