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

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

Issue 199043004: Make PixelRefUtils::GatherDiscardablePixelRefs use Skia's version of the NoSaveLayerCanvas (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed Created 6 years, 9 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 | « no previous file | skia/skia_library.gypi » ('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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/pixel_ref_utils.h" 5 #include "skia/ext/pixel_ref_utils.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "third_party/skia/include/core/SkBitmapDevice.h" 9 #include "third_party/skia/include/core/SkBitmapDevice.h"
10 #include "third_party/skia/include/core/SkCanvas.h" 10 #include "third_party/skia/include/core/SkCanvas.h"
11 #include "third_party/skia/include/core/SkData.h" 11 #include "third_party/skia/include/core/SkData.h"
12 #include "third_party/skia/include/core/SkDraw.h" 12 #include "third_party/skia/include/core/SkDraw.h"
13 #include "third_party/skia/include/core/SkPixelRef.h" 13 #include "third_party/skia/include/core/SkPixelRef.h"
14 #include "third_party/skia/include/core/SkRRect.h" 14 #include "third_party/skia/include/core/SkRRect.h"
15 #include "third_party/skia/include/core/SkRect.h" 15 #include "third_party/skia/include/core/SkRect.h"
16 #include "third_party/skia/include/core/SkShader.h" 16 #include "third_party/skia/include/core/SkShader.h"
17 #include "third_party/skia/include/utils/SkNoSaveLayerCanvas.h"
17 #include "third_party/skia/src/core/SkRasterClip.h" 18 #include "third_party/skia/src/core/SkRasterClip.h"
18 19
19 namespace skia { 20 namespace skia {
20 21
21 namespace { 22 namespace {
22 23
23 // URI label for a discardable SkPixelRef. 24 // URI label for a discardable SkPixelRef.
24 const char kLabelDiscardable[] = "discardable"; 25 const char kLabelDiscardable[] = "discardable";
25 26
26 class DiscardablePixelRefSet { 27 class DiscardablePixelRefSet {
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 if (shader) { 343 if (shader) {
343 // Check whether the shader is a gradient in order to prevent generation 344 // Check whether the shader is a gradient in order to prevent generation
344 // of bitmaps from gradient shaders, which implement asABitmap. 345 // of bitmaps from gradient shaders, which implement asABitmap.
345 if (SkShader::kNone_GradientType == shader->asAGradient(NULL)) 346 if (SkShader::kNone_GradientType == shader->asAGradient(NULL))
346 return shader->asABitmap(bm, NULL, NULL); 347 return shader->asABitmap(bm, NULL, NULL);
347 } 348 }
348 return false; 349 return false;
349 } 350 }
350 }; 351 };
351 352
352 class NoSaveLayerCanvas : public SkCanvas {
353 public:
354 NoSaveLayerCanvas(SkBaseDevice* device) : INHERITED(device) {}
355
356 protected:
357 // Turn saveLayer() into save() for speed, should not affect correctness.
358 virtual SaveLayerStrategy willSaveLayer(const SkRect* bounds,
359 const SkPaint* paint,
360 SaveFlags flags) SK_OVERRIDE {
361 this->INHERITED::willSaveLayer(bounds, paint, flags);
362 return kNoLayer_SaveLayerStrategy;
363 }
364
365 // Disable aa for speed.
366 virtual void onClipRect(const SkRect& rect,
367 SkRegion::Op op,
368 ClipEdgeStyle edge_style) SK_OVERRIDE {
369 this->INHERITED::onClipRect(rect, op, kHard_ClipEdgeStyle);
370 }
371
372 virtual void onClipPath(const SkPath& path,
373 SkRegion::Op op,
374 ClipEdgeStyle edge_style) SK_OVERRIDE {
375 this->updateClipConservativelyUsingBounds(path.getBounds(), op,
376 path.isInverseFillType());
377 }
378 virtual void onClipRRect(const SkRRect& rrect,
379 SkRegion::Op op,
380 ClipEdgeStyle edge_style) SK_OVERRIDE {
381 this->updateClipConservativelyUsingBounds(rrect.getBounds(), op, false);
382 }
383
384 private:
385 typedef SkCanvas INHERITED;
386 };
387
388 } // namespace 353 } // namespace
389 354
390 void PixelRefUtils::GatherDiscardablePixelRefs( 355 void PixelRefUtils::GatherDiscardablePixelRefs(
391 SkPicture* picture, 356 SkPicture* picture,
392 std::vector<PositionPixelRef>* pixel_refs) { 357 std::vector<PositionPixelRef>* pixel_refs) {
393 pixel_refs->clear(); 358 pixel_refs->clear();
394 DiscardablePixelRefSet pixel_ref_set(pixel_refs); 359 DiscardablePixelRefSet pixel_ref_set(pixel_refs);
395 360
396 SkBitmap empty_bitmap; 361 SkBitmap empty_bitmap;
397 empty_bitmap.setConfig( 362 empty_bitmap.setConfig(
398 SkBitmap::kNo_Config, picture->width(), picture->height()); 363 SkBitmap::kNo_Config, picture->width(), picture->height());
399 364
400 GatherPixelRefDevice device(empty_bitmap, &pixel_ref_set); 365 GatherPixelRefDevice device(empty_bitmap, &pixel_ref_set);
401 NoSaveLayerCanvas canvas(&device); 366 SkNoSaveLayerCanvas canvas(&device);
402 367
403 canvas.clipRect(SkRect::MakeWH(picture->width(), picture->height()), 368 canvas.clipRect(SkRect::MakeWH(picture->width(), picture->height()),
404 SkRegion::kIntersect_Op, 369 SkRegion::kIntersect_Op,
405 false); 370 false);
406 canvas.drawPicture(*picture); 371 canvas.drawPicture(*picture);
407 } 372 }
408 373
409 } // namespace skia 374 } // namespace skia
OLDNEW
« no previous file with comments | « no previous file | skia/skia_library.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698