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

Side by Side Diff: src/core/SkPicture.cpp

Issue 550083006: Turn on all pixel-perfect SkRecord optimizations. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: update unit test 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
« no previous file with comments | « no previous file | src/core/SkRecordOpts.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2007 The Android Open Source Project 3 * Copyright 2007 The Android Open Source Project
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 9
10 #include "SkPictureFlat.h" 10 #include "SkPictureFlat.h"
(...skipping 22 matching lines...) Expand all
33 #include "SkWriter32.h" 33 #include "SkWriter32.h"
34 #include "SkRTree.h" 34 #include "SkRTree.h"
35 #include "SkBBoxHierarchyRecord.h" 35 #include "SkBBoxHierarchyRecord.h"
36 36
37 #if SK_SUPPORT_GPU 37 #if SK_SUPPORT_GPU
38 #include "GrContext.h" 38 #include "GrContext.h"
39 #endif 39 #endif
40 40
41 #include "SkRecord.h" 41 #include "SkRecord.h"
42 #include "SkRecordDraw.h" 42 #include "SkRecordDraw.h"
43 #include "SkRecordOpts.h"
43 #include "SkRecorder.h" 44 #include "SkRecorder.h"
44 45
45 template <typename T> int SafeCount(const T* obj) { 46 template <typename T> int SafeCount(const T* obj) {
46 return obj ? obj->count() : 0; 47 return obj ? obj->count() : 0;
47 } 48 }
48 49
49 /////////////////////////////////////////////////////////////////////////////// 50 ///////////////////////////////////////////////////////////////////////////////
50 51
51 namespace { 52 namespace {
52 53
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 SkPictInfo info; 265 SkPictInfo info;
265 this->createHeader(&info); 266 this->createHeader(&info);
266 fData.reset(SkNEW_ARGS(SkPictureData, (record, info, deepCopyOps))); 267 fData.reset(SkNEW_ARGS(SkPictureData, (record, info, deepCopyOps)));
267 } 268 }
268 269
269 // Create an SkPictureData-backed SkPicture from an SkRecord. 270 // Create an SkPictureData-backed SkPicture from an SkRecord.
270 // This for compatibility with serialization code only. This is not cheap. 271 // This for compatibility with serialization code only. This is not cheap.
271 static SkPicture* backport(const SkRecord& src, const SkRect& cullRect) { 272 static SkPicture* backport(const SkRecord& src, const SkRect& cullRect) {
272 SkPictureRecorder recorder; 273 SkPictureRecorder recorder;
273 SkRecordDraw(src, 274 SkRecordDraw(src,
274 recorder.DEPRECATED_beginRecording(cullRect.width(), cullRect.h eight()), 275 recorder.DEPRECATED_beginRecording(cullRect.width(), cullRect.h eight()),
275 NULL/*bbh*/, NULL/*callback*/); 276 NULL/*bbh*/, NULL/*callback*/);
276 return recorder.endRecording(); 277 return recorder.endRecording();
277 } 278 }
278 279
279 // fRecord OK 280 // fRecord OK
280 SkPicture::~SkPicture() { 281 SkPicture::~SkPicture() {
281 this->callDeletionListeners(); 282 this->callDeletionListeners();
282 } 283 }
283 284
284 // fRecord OK 285 // fRecord OK
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 , fCullWidth(width) 454 , fCullWidth(width)
454 , fCullHeight(height) 455 , fCullHeight(height)
455 , fAnalysis() { 456 , fAnalysis() {
456 this->needsNewGenID(); 457 this->needsNewGenID();
457 } 458 }
458 459
459 SkPicture* SkPicture::Forwardport(const SkPicture& src) { 460 SkPicture* SkPicture::Forwardport(const SkPicture& src) {
460 SkAutoTDelete<SkRecord> record(SkNEW(SkRecord)); 461 SkAutoTDelete<SkRecord> record(SkNEW(SkRecord));
461 SkRecorder canvas(record.get(), src.cullRect().width(), src.cullRect().heigh t()); 462 SkRecorder canvas(record.get(), src.cullRect().width(), src.cullRect().heigh t());
462 src.playback(&canvas); 463 src.playback(&canvas);
463 return SkNEW_ARGS(SkPicture, (src.cullRect().width(), src.cullRect().height( ), 464 return SkNEW_ARGS(SkPicture, (src.cullRect().width(), src.cullRect().height( ),
464 record.detach(), NULL/*bbh*/)); 465 record.detach(), NULL/*bbh*/));
465 } 466 }
466 467
467 // fRecord OK 468 // fRecord OK
468 SkPicture* SkPicture::CreateFromStream(SkStream* stream, InstallPixelRefProc pro c) { 469 SkPicture* SkPicture::CreateFromStream(SkStream* stream, InstallPixelRefProc pro c) {
469 SkPictInfo info; 470 SkPictInfo info;
470 471
471 if (!InternalOnly_StreamIsSKP(stream, &info)) { 472 if (!InternalOnly_StreamIsSKP(stream, &info)) {
472 return NULL; 473 return NULL;
473 } 474 }
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 return fUniqueID; 639 return fUniqueID;
639 } 640 }
640 641
641 // fRecord OK 642 // fRecord OK
642 SkPicture::SkPicture(SkScalar width, SkScalar height, SkRecord* record, SkBBoxHi erarchy* bbh) 643 SkPicture::SkPicture(SkScalar width, SkScalar height, SkRecord* record, SkBBoxHi erarchy* bbh)
643 : fCullWidth(width) 644 : fCullWidth(width)
644 , fCullHeight(height) 645 , fCullHeight(height)
645 , fRecord(record) 646 , fRecord(record)
646 , fBBH(SkSafeRef(bbh)) 647 , fBBH(SkSafeRef(bbh))
647 , fAnalysis(*record) { 648 , fAnalysis(*record) {
649 // TODO: move optimization before we construct fAnalysis?
650 SkRecordOptimize(record);
648 // TODO: delay as much of this work until just before first playback? 651 // TODO: delay as much of this work until just before first playback?
649 if (fBBH.get()) { 652 if (fBBH.get()) {
650 SkRecordFillBounds(*record, fBBH.get()); 653 SkRecordFillBounds(*record, fBBH.get());
651 } 654 }
652 this->needsNewGenID(); 655 this->needsNewGenID();
653 } 656 }
654 657
655 // Note that we are assuming that this entry point will only be called from 658 // Note that we are assuming that this entry point will only be called from
656 // one thread. Currently the only client of this method is 659 // one thread. Currently the only client of this method is
657 // SkGpuDevice::EXPERIMENTAL_optimize which should be only called from a single 660 // SkGpuDevice::EXPERIMENTAL_optimize which should be only called from a single
(...skipping 16 matching lines...) Expand all
674 int SkPicture::approximateOpCount() const { 677 int SkPicture::approximateOpCount() const {
675 SkASSERT(fRecord.get() || fData.get()); 678 SkASSERT(fRecord.get() || fData.get());
676 if (fRecord.get()) { 679 if (fRecord.get()) {
677 return fRecord->count(); 680 return fRecord->count();
678 } 681 }
679 if (fData.get()) { 682 if (fData.get()) {
680 return fData->opCount(); 683 return fData->opCount();
681 } 684 }
682 return 0; 685 return 0;
683 } 686 }
OLDNEW
« no previous file with comments | « no previous file | src/core/SkRecordOpts.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698