OLD | NEW |
---|---|
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 "base/base64.h" | |
5 #include "base/debug/trace_event.h" | 6 #include "base/debug/trace_event.h" |
6 #include "cc/debug/rendering_stats.h" | 7 #include "cc/debug/rendering_stats.h" |
7 #include "cc/layers/content_layer_client.h" | 8 #include "cc/layers/content_layer_client.h" |
8 #include "cc/resources/picture.h" | 9 #include "cc/resources/picture.h" |
tfarina
2013/04/13 00:49:01
nit: this should be the first include.
| |
9 #include "skia/ext/analysis_canvas.h" | 10 #include "skia/ext/analysis_canvas.h" |
10 #include "third_party/skia/include/core/SkCanvas.h" | 11 #include "third_party/skia/include/core/SkCanvas.h" |
11 #include "third_party/skia/include/core/SkData.h" | 12 #include "third_party/skia/include/core/SkData.h" |
12 #include "third_party/skia/include/core/SkDrawFilter.h" | 13 #include "third_party/skia/include/core/SkDrawFilter.h" |
13 #include "third_party/skia/include/core/SkPaint.h" | 14 #include "third_party/skia/include/core/SkPaint.h" |
15 #include "third_party/skia/include/core/SkStream.h" | |
14 #include "third_party/skia/include/utils/SkPictureUtils.h" | 16 #include "third_party/skia/include/utils/SkPictureUtils.h" |
15 #include "ui/gfx/rect_conversions.h" | 17 #include "ui/gfx/rect_conversions.h" |
16 #include "ui/gfx/skia_util.h" | 18 #include "ui/gfx/skia_util.h" |
17 | 19 |
18 namespace { | 20 namespace { |
19 // URI label for a lazily decoded SkPixelRef. | 21 // URI label for a lazily decoded SkPixelRef. |
20 const char kLabelLazyDecoded[] = "lazy"; | 22 const char kLabelLazyDecoded[] = "lazy"; |
21 | 23 |
22 class DisableLCDTextFilter : public SkDrawFilter { | 24 class DisableLCDTextFilter : public SkDrawFilter { |
23 public: | 25 public: |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
143 canvas->clipRect(gfx::RectToSkRect(content_rect)); | 145 canvas->clipRect(gfx::RectToSkRect(content_rect)); |
144 canvas->scale(contents_scale, contents_scale); | 146 canvas->scale(contents_scale, contents_scale); |
145 canvas->translate(layer_rect_.x(), layer_rect_.y()); | 147 canvas->translate(layer_rect_.x(), layer_rect_.y()); |
146 // Pictures by default have LCD text enabled. | 148 // Pictures by default have LCD text enabled. |
147 if (!enable_lcd_text) | 149 if (!enable_lcd_text) |
148 canvas->setDrawFilter(&disable_lcd_text_filter); | 150 canvas->setDrawFilter(&disable_lcd_text_filter); |
149 canvas->drawPicture(*picture_); | 151 canvas->drawPicture(*picture_); |
150 canvas->restore(); | 152 canvas->restore(); |
151 } | 153 } |
152 | 154 |
155 void Picture::AsBase64String(std::string* output) const { | |
tfarina
2013/04/13 00:49:01
the order of implementation should match with the
| |
156 SkDynamicMemoryWStream stream; | |
157 picture_->serialize(&stream); | |
158 size_t serialized_size = stream.bytesWritten(); | |
159 scoped_ptr<char[]> serialized_picture(new char[serialized_size]); | |
160 stream.copyTo(serialized_picture.get()); | |
161 base::Base64Encode(std::string(serialized_picture.get(), serialized_size), | |
162 output); | |
163 } | |
164 | |
165 void Picture::SetPictureFromBase64String(const std::string & encoded) { | |
166 std::string decoded; | |
167 base::Base64Decode(encoded, &decoded); | |
168 SkMemoryStream stream(decoded.data(), decoded.size()); | |
169 picture_ = skia::AdoptRef(new SkPicture(&stream)); | |
170 } | |
171 | |
153 void Picture::GatherPixelRefs(const gfx::Rect& layer_rect, | 172 void Picture::GatherPixelRefs(const gfx::Rect& layer_rect, |
154 std::list<skia::LazyPixelRef*>& pixel_ref_list) { | 173 std::list<skia::LazyPixelRef*>& pixel_ref_list) { |
155 DCHECK(picture_); | 174 DCHECK(picture_); |
156 SkData* pixel_refs = SkPictureUtils::GatherPixelRefs( | 175 SkData* pixel_refs = SkPictureUtils::GatherPixelRefs( |
157 picture_.get(), SkRect::MakeXYWH(layer_rect.x(), | 176 picture_.get(), SkRect::MakeXYWH(layer_rect.x(), |
158 layer_rect.y(), | 177 layer_rect.y(), |
159 layer_rect.width(), | 178 layer_rect.width(), |
160 layer_rect.height())); | 179 layer_rect.height())); |
161 if (!pixel_refs) | 180 if (!pixel_refs) |
162 return; | 181 return; |
163 | 182 |
164 void* data = const_cast<void*>(pixel_refs->data()); | 183 void* data = const_cast<void*>(pixel_refs->data()); |
165 if (!data) { | 184 if (!data) { |
166 pixel_refs->unref(); | 185 pixel_refs->unref(); |
167 return; | 186 return; |
168 } | 187 } |
169 | 188 |
170 SkPixelRef** refs = reinterpret_cast<SkPixelRef**>(data); | 189 SkPixelRef** refs = reinterpret_cast<SkPixelRef**>(data); |
171 for (size_t i = 0; i < pixel_refs->size() / sizeof(*refs); ++i) { | 190 for (size_t i = 0; i < pixel_refs->size() / sizeof(*refs); ++i) { |
172 if (*refs && (*refs)->getURI() && !strncmp( | 191 if (*refs && (*refs)->getURI() && !strncmp( |
173 (*refs)->getURI(), kLabelLazyDecoded, 4)) { | 192 (*refs)->getURI(), kLabelLazyDecoded, 4)) { |
174 pixel_ref_list.push_back(static_cast<skia::LazyPixelRef*>(*refs)); | 193 pixel_ref_list.push_back(static_cast<skia::LazyPixelRef*>(*refs)); |
175 } | 194 } |
176 refs++; | 195 refs++; |
177 } | 196 } |
178 pixel_refs->unref(); | 197 pixel_refs->unref(); |
179 } | 198 } |
180 | 199 |
181 } // namespace cc | 200 } // namespace cc |
OLD | NEW |