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

Side by Side Diff: src/utils/SkDeferredCanvas.cpp

Issue 545813002: Picture Recording: fix the performance bottleneck in SkDeferredCanvas::isFullFrame (Closed) Base URL: https://chromium.googlesource.com/skia.git@master
Patch Set: use interface in SkDeferredCanvas Created 6 years, 3 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
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2013 Google Inc. 3 * Copyright 2013 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "SkDeferredCanvas.h" 9 #include "SkDeferredCanvas.h"
10 10
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 fNotificationClient->flushedDrawCommands(); 363 fNotificationClient->flushedDrawCommands();
364 } 364 }
365 } 365 }
366 366
367 fPreviousStorageAllocated = storageAllocatedForRecording(); 367 fPreviousStorageAllocated = storageAllocatedForRecording();
368 } 368 }
369 369
370 void SkDeferredDevice::flush() { 370 void SkDeferredDevice::flush() {
371 this->flushPendingCommands(kNormal_PlaybackMode); 371 this->flushPendingCommands(kNormal_PlaybackMode);
372 fImmediateCanvas->flush(); 372 fImmediateCanvas->flush();
373 fFreshFrame = true;
373 } 374 }
374 375
375 size_t SkDeferredDevice::freeMemoryIfPossible(size_t bytesToFree) { 376 size_t SkDeferredDevice::freeMemoryIfPossible(size_t bytesToFree) {
376 size_t val = fPipeWriter.freeMemoryIfPossible(bytesToFree); 377 size_t val = fPipeWriter.freeMemoryIfPossible(bytesToFree);
377 fPreviousStorageAllocated = storageAllocatedForRecording(); 378 fPreviousStorageAllocated = storageAllocatedForRecording();
378 return val; 379 return val;
379 } 380 }
380 381
381 size_t SkDeferredDevice::storageAllocatedForRecording() const { 382 size_t SkDeferredDevice::storageAllocatedForRecording() const {
382 return (fPipeController.storageAllocatedForRecording() 383 return (fPipeController.storageAllocatedForRecording()
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
623 return notificationClient; 624 return notificationClient;
624 } 625 }
625 626
626 SkImage* SkDeferredCanvas::newImageSnapshot() { 627 SkImage* SkDeferredCanvas::newImageSnapshot() {
627 SkDeferredDevice* deferredDevice = this->getDeferredDevice(); 628 SkDeferredDevice* deferredDevice = this->getDeferredDevice();
628 SkASSERT(deferredDevice); 629 SkASSERT(deferredDevice);
629 return deferredDevice ? deferredDevice->newImageSnapshot() : NULL; 630 return deferredDevice ? deferredDevice->newImageSnapshot() : NULL;
630 } 631 }
631 632
632 bool SkDeferredCanvas::isFullFrame(const SkRect* rect, 633 bool SkDeferredCanvas::isFullFrame(const SkRect* rect,
633 const SkPaint* paint) const { 634 const SkPaint* paint) {
634 SkCanvas* canvas = this->drawingCanvas(); 635 SkCanvas* canvas = this->drawingCanvas();
635 SkISize canvasSize = this->getDeviceSize(); 636 if (isFreshFrame()) {
yunchao 2014/09/05 08:43:13 maybe I should implement a new method named isNewF
reed1 2014/09/05 13:18:33 nit: this->isFreshFrame()
Justin Novosad 2014/09/05 13:54:49 isFreshFrame is not the right condition for refres
yunchao 2014/09/09 08:58:00 Done.
yunchao 2014/09/09 08:58:00 Done. Added a new interface SkDeferredCanvas::canv
637 canvasSize = this->getDeviceSize();
638 }
636 if (rect) { 639 if (rect) {
637 if (!canvas->getTotalMatrix().rectStaysRect()) { 640 if (!canvas->getTotalMatrix().rectStaysRect()) {
638 return false; // conservative 641 return false; // conservative
639 } 642 }
640 643
641 SkRect transformedRect; 644 SkRect transformedRect;
642 canvas->getTotalMatrix().mapRect(&transformedRect, *rect); 645 canvas->getTotalMatrix().mapRect(&transformedRect, *rect);
643 646
644 if (paint) { 647 if (paint) {
645 SkPaint::Style paintStyle = paint->getStyle(); 648 SkPaint::Style paintStyle = paint->getStyle();
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
937 SkDrawFilter* SkDeferredCanvas::setDrawFilter(SkDrawFilter* filter) { 940 SkDrawFilter* SkDeferredCanvas::setDrawFilter(SkDrawFilter* filter) {
938 this->drawingCanvas()->setDrawFilter(filter); 941 this->drawingCanvas()->setDrawFilter(filter);
939 this->INHERITED::setDrawFilter(filter); 942 this->INHERITED::setDrawFilter(filter);
940 this->recordedDrawCommand(); 943 this->recordedDrawCommand();
941 return filter; 944 return filter;
942 } 945 }
943 946
944 SkCanvas* SkDeferredCanvas::canvasForDrawIter() { 947 SkCanvas* SkDeferredCanvas::canvasForDrawIter() {
945 return this->drawingCanvas(); 948 return this->drawingCanvas();
946 } 949 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698