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

Unified Diff: tools/PictureRenderer.cpp

Issue 214953003: split SkPictureRecorder out of SkPicture (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: update to ToT (again) Created 6 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: tools/PictureRenderer.cpp
===================================================================
--- tools/PictureRenderer.cpp (revision 14159)
+++ tools/PictureRenderer.cpp (working copy)
@@ -120,7 +120,7 @@
SkASSERT(NULL == fPicture);
SkASSERT(NULL == fCanvas.get());
- if (fPicture != NULL || NULL != fCanvas.get()) {
+ if (NULL != fPicture || NULL != fCanvas.get()) {
return;
}
@@ -129,8 +129,7 @@
return;
}
- fPicture = pict;
- fPicture->ref();
+ fPicture.reset(pict)->ref();
fCanvas.reset(this->setupCanvas());
}
@@ -246,8 +245,7 @@
void PictureRenderer::end() {
this->resetState(true);
- SkSafeUnref(fPicture);
- fPicture = NULL;
+ fPicture.reset(NULL);
fCanvas.reset(NULL);
}
@@ -276,13 +274,12 @@
void PictureRenderer::buildBBoxHierarchy() {
SkASSERT(NULL != fPicture);
if (kNone_BBoxHierarchyType != fBBoxHierarchyType && NULL != fPicture) {
- SkPicture* newPicture = this->createPicture();
- SkCanvas* recorder = newPicture->beginRecording(fPicture->width(), fPicture->height(),
- this->recordFlags());
- fPicture->draw(recorder);
- newPicture->endRecording();
- fPicture->unref();
- fPicture = newPicture;
+ SkAutoTUnref<SkPictureFactory> factory(this->getFactory());
+ SkPictureRecorder recorder(factory);
+ SkCanvas* canvas = recorder.beginRecording(fPicture->width(), fPicture->height(),
+ this->recordFlags());
+ fPicture->draw(canvas);
+ fPicture.reset(recorder.endRecording());
}
}
@@ -438,17 +435,18 @@
}
bool RecordPictureRenderer::render(SkBitmap** out) {
- SkAutoTUnref<SkPicture> replayer(this->createPicture());
- SkCanvas* recorder = replayer->beginRecording(this->getViewWidth(), this->getViewHeight(),
- this->recordFlags());
- this->scaleToScaleFactor(recorder);
- fPicture->draw(recorder);
- replayer->endRecording();
+ SkAutoTUnref<SkPictureFactory> factory(this->getFactory());
+ SkPictureRecorder recorder(factory);
+ SkCanvas* canvas = recorder.beginRecording(this->getViewWidth(), this->getViewHeight(),
+ this->recordFlags());
+ this->scaleToScaleFactor(canvas);
+ fPicture->draw(canvas);
+ SkAutoTUnref<SkPicture> picture(recorder.endRecording());
if (!fOutputDir.isEmpty()) {
// Record the new picture as a new SKP with PNG encoded bitmaps.
SkString skpPath = SkOSPath::SkPathJoin(fOutputDir.c_str(), fInputFilename.c_str());
SkFILEWStream stream(skpPath.c_str());
- replayer->serialize(&stream, &encode_bitmap_to_data);
+ picture->serialize(&stream, &encode_bitmap_to_data);
return true;
}
return false;
@@ -499,7 +497,7 @@
bool SimplePictureRenderer::render(SkBitmap** out) {
SkASSERT(fCanvas.get() != NULL);
- SkASSERT(fPicture != NULL);
+ SkASSERT(NULL != fPicture);
if (NULL == fCanvas.get() || NULL == fPicture) {
return false;
}
@@ -538,7 +536,7 @@
void TiledPictureRenderer::init(SkPicture* pict, const SkString* outputDir,
const SkString* inputFilename, bool useChecksumBasedFilenames) {
- SkASSERT(pict != NULL);
+ SkASSERT(NULL != pict);
SkASSERT(0 == fTileRects.count());
if (NULL == pict || fTileRects.count() != 0) {
return;
@@ -546,7 +544,7 @@
// Do not call INHERITED::init(), which would create a (potentially large) canvas which is not
// used by bench_pictures.
- fPicture = SkRef(pict);
+ fPicture.reset(pict)->ref();
this->CopyString(&fOutputDir, outputDir);
this->CopyString(&fInputFilename, inputFilename);
fUseChecksumBasedFilenames = useChecksumBasedFilenames;
@@ -956,15 +954,16 @@
///////////////////////////////////////////////////////////////////////////////////////////////
void PlaybackCreationRenderer::setup() {
- fReplayer.reset(this->createPicture());
- SkCanvas* recorder = fReplayer->beginRecording(this->getViewWidth(), this->getViewHeight(),
- this->recordFlags());
- this->scaleToScaleFactor(recorder);
- recorder->drawPicture(*fPicture);
+ SkAutoTUnref<SkPictureFactory> factory(this->getFactory());
+ fRecorder.reset(SkNEW_ARGS(SkPictureRecorder, (factory)));
+ SkCanvas* canvas = fRecorder->beginRecording(this->getViewWidth(), this->getViewHeight(),
+ this->recordFlags());
+ this->scaleToScaleFactor(canvas);
+ canvas->drawPicture(*fPicture);
}
bool PlaybackCreationRenderer::render(SkBitmap** out) {
- fReplayer->endRecording();
+ fPicture.reset(fRecorder->endRecording());
// Since this class does not actually render, return false.
return false;
}
@@ -978,7 +977,7 @@
class RTreePicture : public SkPicture {
public:
- virtual SkBBoxHierarchy* createBBoxHierarchy() const SK_OVERRIDE{
+ virtual SkBBoxHierarchy* createBBoxHierarchy() const SK_OVERRIDE {
static const int kRTreeMinChildren = 6;
static const int kRTreeMaxChildren = 11;
SkScalar aspectRatio = SkScalarDiv(SkIntToScalar(fWidth),
@@ -989,18 +988,26 @@
}
};
-SkPicture* PictureRenderer::createPicture() {
+class SkRTreePictureFactory : public SkPictureFactory {
+private:
+ virtual SkPicture* create(int width, int height) SK_OVERRIDE {
+ return SkNEW(RTreePicture);
+ }
+
+private:
+ typedef SkPictureFactory INHERITED;
+};
+
+SkPictureFactory* PictureRenderer::getFactory() {
switch (fBBoxHierarchyType) {
case kNone_BBoxHierarchyType:
- return SkNEW(SkPicture);
+ return NULL;
case kQuadTree_BBoxHierarchyType:
- return SkNEW_ARGS(SkQuadTreePicture, (SkIRect::MakeWH(fPicture->width(),
- fPicture->height())));
+ return SkNEW(SkQuadTreePictureFactory);
case kRTree_BBoxHierarchyType:
- return SkNEW(RTreePicture);
+ return SkNEW(SkRTreePictureFactory);
case kTileGrid_BBoxHierarchyType:
- return SkNEW_ARGS(SkTileGridPicture, (fPicture->width(),
- fPicture->height(), fGridInfo));
+ return new SkTileGridPictureFactory(fGridInfo);
}
SkASSERT(0); // invalid bbhType
return NULL;

Powered by Google App Engine
This is Rietveld 408576698