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

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

Issue 454123003: Plumbing for using a BBH in SkRecordDraw. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: clang says asserts are always true Created 6 years, 4 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 | « include/core/SkPictureRecorder.h ('k') | src/core/SkPictureRecorder.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"
11 #include "SkPictureData.h" 11 #include "SkPictureData.h"
12 #include "SkPicturePlayback.h" 12 #include "SkPicturePlayback.h"
13 #include "SkPictureRecord.h" 13 #include "SkPictureRecord.h"
14 #include "SkPictureRecorder.h" 14 #include "SkPictureRecorder.h"
15 #include "SkPictureStateTree.h" 15 #include "SkPictureStateTree.h"
16 16
17 #include "SkBBHFactory.h"
18 #include "SkBitmapDevice.h" 17 #include "SkBitmapDevice.h"
19 #include "SkCanvas.h" 18 #include "SkCanvas.h"
20 #include "SkChunkAlloc.h" 19 #include "SkChunkAlloc.h"
21 #include "SkDrawPictureCallback.h" 20 #include "SkDrawPictureCallback.h"
22 #include "SkPaintPriv.h" 21 #include "SkPaintPriv.h"
23 #include "SkPicture.h" 22 #include "SkPicture.h"
24 #include "SkRecordAnalysis.h" 23 #include "SkRecordAnalysis.h"
25 #include "SkRegion.h" 24 #include "SkRegion.h"
26 #include "SkStream.h" 25 #include "SkStream.h"
27 #include "SkTDArray.h" 26 #include "SkTDArray.h"
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 131
133 SkPictInfo info; 132 SkPictInfo info;
134 this->createHeader(&info); 133 this->createHeader(&info);
135 fData.reset(SkNEW_ARGS(SkPictureData, (record, info, deepCopyOps))); 134 fData.reset(SkNEW_ARGS(SkPictureData, (record, info, deepCopyOps)));
136 } 135 }
137 136
138 // Create an SkPictureData-backed SkPicture from an SkRecord. 137 // Create an SkPictureData-backed SkPicture from an SkRecord.
139 // This for compatibility with serialization code only. This is not cheap. 138 // This for compatibility with serialization code only. This is not cheap.
140 static SkPicture* backport(const SkRecord& src, int width, int height) { 139 static SkPicture* backport(const SkRecord& src, int width, int height) {
141 SkPictureRecorder recorder; 140 SkPictureRecorder recorder;
142 SkRecordDraw(src, recorder.beginRecording(width, height)); 141 SkRecordDraw(src, recorder.beginRecording(width, height), NULL/*bbh*/, NULL/ *callback*/);
143 return recorder.endRecording(); 142 return recorder.endRecording();
144 } 143 }
145 144
146 // fRecord OK 145 // fRecord OK
147 SkPicture::~SkPicture() { 146 SkPicture::~SkPicture() {
148 this->callDeletionListeners(); 147 this->callDeletionListeners();
149 } 148 }
150 149
151 #ifdef SK_SUPPORT_LEGACY_PICTURE_CLONE 150 #ifdef SK_SUPPORT_LEGACY_PICTURE_CLONE
152 // fRecord TODO, fix by deleting this method 151 // fRecord TODO, fix by deleting this method
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 // fRecord OK 259 // fRecord OK
261 void SkPicture::draw(SkCanvas* canvas, SkDrawPictureCallback* callback) const { 260 void SkPicture::draw(SkCanvas* canvas, SkDrawPictureCallback* callback) const {
262 SkASSERT(NULL != canvas); 261 SkASSERT(NULL != canvas);
263 SkASSERT(NULL != fData.get() || NULL != fRecord.get()); 262 SkASSERT(NULL != fData.get() || NULL != fRecord.get());
264 263
265 if (NULL != fData.get()) { 264 if (NULL != fData.get()) {
266 SkPicturePlayback playback(this); 265 SkPicturePlayback playback(this);
267 playback.draw(canvas, callback); 266 playback.draw(canvas, callback);
268 } 267 }
269 if (NULL != fRecord.get()) { 268 if (NULL != fRecord.get()) {
270 SkRecordDraw(*fRecord, canvas, callback); 269 SkRecordDraw(*fRecord, canvas, fBBH.get(), callback);
271 } 270 }
272 } 271 }
273 272
274 /////////////////////////////////////////////////////////////////////////////// 273 ///////////////////////////////////////////////////////////////////////////////
275 274
276 #include "SkStream.h" 275 #include "SkStream.h"
277 276
278 static const char kMagic[] = { 's', 'k', 'i', 'a', 'p', 'i', 'c', 't' }; 277 static const char kMagic[] = { 's', 'k', 'i', 'a', 'p', 'i', 'c', 't' };
279 278
280 // fRecord OK 279 // fRecord OK
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 482
484 // fRecord OK 483 // fRecord OK
485 uint32_t SkPicture::uniqueID() const { 484 uint32_t SkPicture::uniqueID() const {
486 if (SK_InvalidGenID == fUniqueID) { 485 if (SK_InvalidGenID == fUniqueID) {
487 fUniqueID = next_picture_generation_id(); 486 fUniqueID = next_picture_generation_id();
488 } 487 }
489 return fUniqueID; 488 return fUniqueID;
490 } 489 }
491 490
492 // fRecord OK 491 // fRecord OK
493 SkPicture::SkPicture(int width, int height, SkRecord* record) 492 SkPicture::SkPicture(int width, int height, SkRecord* record, SkBBoxHierarchy* b bh)
494 : fWidth(width) 493 : fWidth(width)
495 , fHeight(height) 494 , fHeight(height)
496 , fRecord(record) 495 , fRecord(record)
496 , fBBH(SkSafeRef(bbh))
497 , fRecordWillPlayBackBitmaps(SkRecordWillPlaybackBitmaps(*record)) { 497 , fRecordWillPlayBackBitmaps(SkRecordWillPlaybackBitmaps(*record)) {
498 // TODO: delay as much of this work until just before first playback?
499 if (fBBH.get()) {
500 SkRecordFillBounds(*record, fBBH.get());
501 }
498 this->needsNewGenID(); 502 this->needsNewGenID();
499 } 503 }
500 504
501 // Note that we are assuming that this entry point will only be called from 505 // Note that we are assuming that this entry point will only be called from
502 // one thread. Currently the only client of this method is 506 // one thread. Currently the only client of this method is
503 // SkGpuDevice::EXPERIMENTAL_optimize which should be only called from a single 507 // SkGpuDevice::EXPERIMENTAL_optimize which should be only called from a single
504 // thread. 508 // thread.
505 void SkPicture::addDeletionListener(DeletionListener* listener) const { 509 void SkPicture::addDeletionListener(DeletionListener* listener) const {
506 SkASSERT(NULL != listener); 510 SkASSERT(NULL != listener);
507 511
508 *fDeletionListeners.append() = SkRef(listener); 512 *fDeletionListeners.append() = SkRef(listener);
509 } 513 }
510 514
511 void SkPicture::callDeletionListeners() { 515 void SkPicture::callDeletionListeners() {
512 for (int i = 0; i < fDeletionListeners.count(); ++i) { 516 for (int i = 0; i < fDeletionListeners.count(); ++i) {
513 fDeletionListeners[i]->onDeletion(this->uniqueID()); 517 fDeletionListeners[i]->onDeletion(this->uniqueID());
514 } 518 }
515 519
516 fDeletionListeners.unrefAll(); 520 fDeletionListeners.unrefAll();
517 } 521 }
OLDNEW
« no previous file with comments | « include/core/SkPictureRecorder.h ('k') | src/core/SkPictureRecorder.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698