Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(261)

Side by Side Diff: skia/ext/pixel_ref_utils.cc

Issue 111143005: cc: Gather and lock/unlock SkDiscardablePixelRefs instead of skia::LazyPixelRefs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: s/lazy/discardable/ to fix cc_unittests Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « skia/ext/pixel_ref_utils.h ('k') | skia/ext/pixel_ref_utils_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "skia/ext/lazy_pixel_ref_utils.h" 5 #include "skia/ext/pixel_ref_utils.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "skia/ext/lazy_pixel_ref.h"
10 #include "third_party/skia/include/core/SkBitmapDevice.h" 9 #include "third_party/skia/include/core/SkBitmapDevice.h"
11 #include "third_party/skia/include/core/SkCanvas.h" 10 #include "third_party/skia/include/core/SkCanvas.h"
12 #include "third_party/skia/include/core/SkData.h" 11 #include "third_party/skia/include/core/SkData.h"
13 #include "third_party/skia/include/core/SkDraw.h" 12 #include "third_party/skia/include/core/SkDraw.h"
14 #include "third_party/skia/include/core/SkPixelRef.h" 13 #include "third_party/skia/include/core/SkPixelRef.h"
15 #include "third_party/skia/include/core/SkRRect.h" 14 #include "third_party/skia/include/core/SkRRect.h"
16 #include "third_party/skia/include/core/SkRect.h" 15 #include "third_party/skia/include/core/SkRect.h"
17 #include "third_party/skia/include/core/SkShader.h" 16 #include "third_party/skia/include/core/SkShader.h"
18 #include "third_party/skia/src/core/SkRasterClip.h" 17 #include "third_party/skia/src/core/SkRasterClip.h"
19 18
20 namespace skia { 19 namespace skia {
21 20
22 namespace { 21 namespace {
23 22
24 // URI label for a lazily decoded SkPixelRef. 23 // URI label for a discardable SkPixelRef.
25 const char kLabelLazyDecoded[] = "lazy"; 24 const char kLabelDiscardable[] = "discardable";
26 25
27 class LazyPixelRefSet { 26 class DiscardablePixelRefSet {
28 public: 27 public:
29 LazyPixelRefSet( 28 DiscardablePixelRefSet(
30 std::vector<LazyPixelRefUtils::PositionLazyPixelRef>* pixel_refs) 29 std::vector<PixelRefUtils::PositionPixelRef>* pixel_refs)
31 : pixel_refs_(pixel_refs) {} 30 : pixel_refs_(pixel_refs) {}
32 31
33 void Add(SkPixelRef* pixel_ref, const SkRect& rect) { 32 void Add(SkPixelRef* pixel_ref, const SkRect& rect) {
34 // Only save lazy pixel refs. 33 // Only save discardable pixel refs.
35 if (pixel_ref->getURI() && 34 if (pixel_ref->getURI() &&
36 !strcmp(pixel_ref->getURI(), kLabelLazyDecoded)) { 35 !strcmp(pixel_ref->getURI(), kLabelDiscardable)) {
37 LazyPixelRefUtils::PositionLazyPixelRef position_pixel_ref; 36 PixelRefUtils::PositionPixelRef position_pixel_ref;
38 position_pixel_ref.lazy_pixel_ref = 37 position_pixel_ref.pixel_ref = pixel_ref;
39 static_cast<skia::LazyPixelRef*>(pixel_ref);
40 position_pixel_ref.pixel_ref_rect = rect; 38 position_pixel_ref.pixel_ref_rect = rect;
41 pixel_refs_->push_back(position_pixel_ref); 39 pixel_refs_->push_back(position_pixel_ref);
42 } 40 }
43 } 41 }
44 42
45 private: 43 private:
46 std::vector<LazyPixelRefUtils::PositionLazyPixelRef>* pixel_refs_; 44 std::vector<PixelRefUtils::PositionPixelRef>* pixel_refs_;
47 }; 45 };
48 46
49 class GatherPixelRefDevice : public SkBitmapDevice { 47 class GatherPixelRefDevice : public SkBitmapDevice {
50 public: 48 public:
51 GatherPixelRefDevice(const SkBitmap& bm, LazyPixelRefSet* lazy_pixel_ref_set) 49 GatherPixelRefDevice(const SkBitmap& bm,
52 : SkBitmapDevice(bm), lazy_pixel_ref_set_(lazy_pixel_ref_set) {} 50 DiscardablePixelRefSet* pixel_ref_set)
51 : SkBitmapDevice(bm), pixel_ref_set_(pixel_ref_set) {}
53 52
54 virtual void clear(SkColor color) SK_OVERRIDE {} 53 virtual void clear(SkColor color) SK_OVERRIDE {}
55 virtual void writePixels(const SkBitmap& bitmap, 54 virtual void writePixels(const SkBitmap& bitmap,
56 int x, 55 int x,
57 int y, 56 int y,
58 SkCanvas::Config8888 config8888) SK_OVERRIDE {} 57 SkCanvas::Config8888 config8888) SK_OVERRIDE {}
59 58
60 virtual void drawPaint(const SkDraw& draw, const SkPaint& paint) SK_OVERRIDE { 59 virtual void drawPaint(const SkDraw& draw, const SkPaint& paint) SK_OVERRIDE {
61 SkBitmap bitmap; 60 SkBitmap bitmap;
62 if (GetBitmapFromPaint(paint, &bitmap)) { 61 if (GetBitmapFromPaint(paint, &bitmap)) {
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 319
321 protected: 320 protected:
322 virtual bool onReadPixels(const SkBitmap& bitmap, 321 virtual bool onReadPixels(const SkBitmap& bitmap,
323 int x, 322 int x,
324 int y, 323 int y,
325 SkCanvas::Config8888 config8888) SK_OVERRIDE { 324 SkCanvas::Config8888 config8888) SK_OVERRIDE {
326 return false; 325 return false;
327 } 326 }
328 327
329 private: 328 private:
330 LazyPixelRefSet* lazy_pixel_ref_set_; 329 DiscardablePixelRefSet* pixel_ref_set_;
331 330
332 void AddBitmap(const SkBitmap& bm, const SkRect& rect) { 331 void AddBitmap(const SkBitmap& bm, const SkRect& rect) {
333 SkRect canvas_rect = SkRect::MakeWH(width(), height()); 332 SkRect canvas_rect = SkRect::MakeWH(width(), height());
334 SkRect paint_rect = SkRect::MakeEmpty(); 333 SkRect paint_rect = SkRect::MakeEmpty();
335 paint_rect.intersect(rect, canvas_rect); 334 paint_rect.intersect(rect, canvas_rect);
336 lazy_pixel_ref_set_->Add(bm.pixelRef(), paint_rect); 335 pixel_ref_set_->Add(bm.pixelRef(), paint_rect);
337 } 336 }
338 337
339 bool GetBitmapFromPaint(const SkPaint& paint, SkBitmap* bm) { 338 bool GetBitmapFromPaint(const SkPaint& paint, SkBitmap* bm) {
340 SkShader* shader = paint.getShader(); 339 SkShader* shader = paint.getShader();
341 if (shader) { 340 if (shader) {
342 // Check whether the shader is a gradient in order to prevent generation 341 // Check whether the shader is a gradient in order to prevent generation
343 // of bitmaps from gradient shaders, which implement asABitmap. 342 // of bitmaps from gradient shaders, which implement asABitmap.
344 if (SkShader::kNone_GradientType == shader->asAGradient(NULL)) 343 if (SkShader::kNone_GradientType == shader->asAGradient(NULL))
345 return shader->asABitmap(bm, NULL, NULL); 344 return shader->asABitmap(bm, NULL, NULL);
346 } 345 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 return this->updateClipConservativelyUsingBounds( 381 return this->updateClipConservativelyUsingBounds(
383 rrect.getBounds(), op, false); 382 rrect.getBounds(), op, false);
384 } 383 }
385 384
386 private: 385 private:
387 typedef SkCanvas INHERITED; 386 typedef SkCanvas INHERITED;
388 }; 387 };
389 388
390 } // namespace 389 } // namespace
391 390
392 void LazyPixelRefUtils::GatherPixelRefs( 391 void PixelRefUtils::GatherDiscardablePixelRefs(
393 SkPicture* picture, 392 SkPicture* picture,
394 std::vector<PositionLazyPixelRef>* lazy_pixel_refs) { 393 std::vector<PositionPixelRef>* pixel_refs) {
395 lazy_pixel_refs->clear(); 394 pixel_refs->clear();
396 LazyPixelRefSet pixel_ref_set(lazy_pixel_refs); 395 DiscardablePixelRefSet pixel_ref_set(pixel_refs);
397 396
398 SkBitmap empty_bitmap; 397 SkBitmap empty_bitmap;
399 empty_bitmap.setConfig( 398 empty_bitmap.setConfig(
400 SkBitmap::kNo_Config, picture->width(), picture->height()); 399 SkBitmap::kNo_Config, picture->width(), picture->height());
401 400
402 GatherPixelRefDevice device(empty_bitmap, &pixel_ref_set); 401 GatherPixelRefDevice device(empty_bitmap, &pixel_ref_set);
403 NoSaveLayerCanvas canvas(&device); 402 NoSaveLayerCanvas canvas(&device);
404 403
405 canvas.clipRect(SkRect::MakeWH(picture->width(), picture->height()), 404 canvas.clipRect(SkRect::MakeWH(picture->width(), picture->height()),
406 SkRegion::kIntersect_Op, 405 SkRegion::kIntersect_Op,
407 false); 406 false);
408 canvas.drawPicture(*picture); 407 canvas.drawPicture(*picture);
409 } 408 }
410 409
411 } // namespace skia 410 } // namespace skia
OLDNEW
« no previous file with comments | « skia/ext/pixel_ref_utils.h ('k') | skia/ext/pixel_ref_utils_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698