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 |
21 #include "ui/gfx/skia_util.h" | 21 #include "ui/gfx/skia_util.h" |
22 | 22 |
23 namespace cc { | 23 namespace cc { |
24 | 24 |
25 CompositingDisplayItem::CompositingDisplayItem( | 25 CompositingDisplayItem::CompositingDisplayItem( |
26 uint8_t alpha, | 26 uint8_t alpha, |
27 SkXfermode::Mode xfermode, | 27 SkBlendMode xfermode, |
28 SkRect* bounds, | 28 SkRect* bounds, |
29 sk_sp<SkColorFilter> cf, | 29 sk_sp<SkColorFilter> cf, |
30 bool lcd_text_requires_opaque_layer) { | 30 bool lcd_text_requires_opaque_layer) { |
31 SetNew(alpha, xfermode, bounds, std::move(cf), | 31 SetNew(alpha, xfermode, bounds, std::move(cf), |
32 lcd_text_requires_opaque_layer); | 32 lcd_text_requires_opaque_layer); |
33 } | 33 } |
34 | 34 |
35 CompositingDisplayItem::CompositingDisplayItem( | 35 CompositingDisplayItem::CompositingDisplayItem( |
36 const proto::DisplayItem& proto) { | 36 const proto::DisplayItem& proto) { |
37 DCHECK_EQ(proto::DisplayItem::Type_Compositing, proto.type()); | 37 DCHECK_EQ(proto::DisplayItem::Type_Compositing, proto.type()); |
38 | 38 |
39 const proto::CompositingDisplayItem& details = proto.compositing_item(); | 39 const proto::CompositingDisplayItem& details = proto.compositing_item(); |
40 uint8_t alpha = static_cast<uint8_t>(details.alpha()); | 40 uint8_t alpha = static_cast<uint8_t>(details.alpha()); |
41 SkXfermode::Mode xfermode = SkXfermodeModeFromProto(details.mode()); | 41 SkBlendMode xfermode = SkXfermodeModeFromProto(details.mode()); |
42 std::unique_ptr<SkRect> bounds; | 42 std::unique_ptr<SkRect> bounds; |
43 if (details.has_bounds()) { | 43 if (details.has_bounds()) { |
44 bounds.reset( | 44 bounds.reset( |
45 new SkRect(gfx::RectFToSkRect(ProtoToRectF(details.bounds())))); | 45 new SkRect(gfx::RectFToSkRect(ProtoToRectF(details.bounds())))); |
46 } | 46 } |
47 | 47 |
48 sk_sp<SkColorFilter> filter; | 48 sk_sp<SkColorFilter> filter; |
49 if (details.has_color_filter()) { | 49 if (details.has_color_filter()) { |
50 SkFlattenable* flattenable = SkValidatingDeserializeFlattenable( | 50 SkFlattenable* flattenable = SkValidatingDeserializeFlattenable( |
51 details.color_filter().c_str(), details.color_filter().size(), | 51 details.color_filter().c_str(), details.color_filter().size(), |
52 SkColorFilter::GetFlattenableType()); | 52 SkColorFilter::GetFlattenableType()); |
53 filter.reset(static_cast<SkColorFilter*>(flattenable)); | 53 filter.reset(static_cast<SkColorFilter*>(flattenable)); |
54 } | 54 } |
55 | 55 |
56 bool lcd_text_requires_opaque_layer = | 56 bool lcd_text_requires_opaque_layer = |
57 details.lcd_text_requires_opaque_layer(); | 57 details.lcd_text_requires_opaque_layer(); |
58 | 58 |
59 SetNew(alpha, xfermode, bounds.get(), std::move(filter), | 59 SetNew(alpha, xfermode, bounds.get(), std::move(filter), |
60 lcd_text_requires_opaque_layer); | 60 lcd_text_requires_opaque_layer); |
61 } | 61 } |
62 | 62 |
63 CompositingDisplayItem::~CompositingDisplayItem() { | 63 CompositingDisplayItem::~CompositingDisplayItem() { |
64 } | 64 } |
65 | 65 |
66 void CompositingDisplayItem::SetNew(uint8_t alpha, | 66 void CompositingDisplayItem::SetNew(uint8_t alpha, |
67 SkXfermode::Mode xfermode, | 67 SkBlendMode xfermode, |
68 SkRect* bounds, | 68 SkRect* bounds, |
69 sk_sp<SkColorFilter> cf, | 69 sk_sp<SkColorFilter> cf, |
70 bool lcd_text_requires_opaque_layer) { | 70 bool lcd_text_requires_opaque_layer) { |
71 alpha_ = alpha; | 71 alpha_ = alpha; |
72 xfermode_ = xfermode; | 72 xfermode_ = xfermode; |
73 has_bounds_ = !!bounds; | 73 has_bounds_ = !!bounds; |
74 if (bounds) | 74 if (bounds) |
75 bounds_ = SkRect(*bounds); | 75 bounds_ = SkRect(*bounds); |
76 color_filter_ = std::move(cf); | 76 color_filter_ = std::move(cf); |
77 lcd_text_requires_opaque_layer_ = lcd_text_requires_opaque_layer; | 77 lcd_text_requires_opaque_layer_ = lcd_text_requires_opaque_layer; |
(...skipping 14 matching lines...) Expand all Loading... | |
92 details->set_color_filter(data->data(), data->size()); | 92 details->set_color_filter(data->data(), data->size()); |
93 } | 93 } |
94 | 94 |
95 details->set_lcd_text_requires_opaque_layer(lcd_text_requires_opaque_layer_); | 95 details->set_lcd_text_requires_opaque_layer(lcd_text_requires_opaque_layer_); |
96 } | 96 } |
97 | 97 |
98 void CompositingDisplayItem::Raster( | 98 void CompositingDisplayItem::Raster( |
99 SkCanvas* canvas, | 99 SkCanvas* canvas, |
100 SkPicture::AbortCallback* callback) const { | 100 SkPicture::AbortCallback* callback) const { |
101 SkPaint paint; | 101 SkPaint paint; |
102 paint.setBlendMode(static_cast<SkBlendMode>(xfermode_)); | 102 paint.setBlendMode(static_cast<SkBlendMode>(xfermode_)); |
f(malita)
2016/11/16 21:10:58
nit: cast no longer needed.
reed1
2016/11/16 21:31:17
Good catch. done.
| |
103 paint.setAlpha(alpha_); | 103 paint.setAlpha(alpha_); |
104 paint.setColorFilter(color_filter_); | 104 paint.setColorFilter(color_filter_); |
105 const SkRect* bounds = has_bounds_ ? &bounds_ : nullptr; | 105 const SkRect* bounds = has_bounds_ ? &bounds_ : nullptr; |
106 if (lcd_text_requires_opaque_layer_) | 106 if (lcd_text_requires_opaque_layer_) |
107 canvas->saveLayer(bounds, &paint); | 107 canvas->saveLayer(bounds, &paint); |
108 else | 108 else |
109 canvas->saveLayerPreserveLCDTextRequests(bounds, &paint); | 109 canvas->saveLayerPreserveLCDTextRequests(bounds, &paint); |
110 } | 110 } |
111 | 111 |
112 void CompositingDisplayItem::AsValueInto( | 112 void CompositingDisplayItem::AsValueInto( |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
155 array->AppendString( | 155 array->AppendString( |
156 base::StringPrintf("EndCompositingDisplayItem visualRect: [%s]", | 156 base::StringPrintf("EndCompositingDisplayItem visualRect: [%s]", |
157 visual_rect.ToString().c_str())); | 157 visual_rect.ToString().c_str())); |
158 } | 158 } |
159 | 159 |
160 size_t EndCompositingDisplayItem::ExternalMemoryUsage() const { | 160 size_t EndCompositingDisplayItem::ExternalMemoryUsage() const { |
161 return 0; | 161 return 0; |
162 } | 162 } |
163 | 163 |
164 } // namespace cc | 164 } // namespace cc |
OLD | NEW |