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

Side by Side Diff: tools/PictureRenderer.cpp

Issue 513983002: Try out scalar picture sizes (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Update to ToT again 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 | « tests/SerializationTest.cpp ('k') | tools/bench_pictures_main.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 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "PictureRenderer.h" 8 #include "PictureRenderer.h"
9 #include "picture_utils.h" 9 #include "picture_utils.h"
10 #include "SamplePipeControllers.h" 10 #include "SamplePipeControllers.h"
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 } 184 }
185 185
186 void PictureRenderer::end() { 186 void PictureRenderer::end() {
187 this->resetState(true); 187 this->resetState(true);
188 fPicture.reset(NULL); 188 fPicture.reset(NULL);
189 fCanvas.reset(NULL); 189 fCanvas.reset(NULL);
190 } 190 }
191 191
192 int PictureRenderer::getViewWidth() { 192 int PictureRenderer::getViewWidth() {
193 SkASSERT(fPicture != NULL); 193 SkASSERT(fPicture != NULL);
194 int width = SkScalarCeilToInt(fPicture->width() * fScaleFactor); 194 int width = SkScalarCeilToInt(fPicture->cullRect().width() * fScaleFactor);
195 if (fViewport.width() > 0) { 195 if (fViewport.width() > 0) {
196 width = SkMin32(width, fViewport.width()); 196 width = SkMin32(width, fViewport.width());
197 } 197 }
198 return width; 198 return width;
199 } 199 }
200 200
201 int PictureRenderer::getViewHeight() { 201 int PictureRenderer::getViewHeight() {
202 SkASSERT(fPicture != NULL); 202 SkASSERT(fPicture != NULL);
203 int height = SkScalarCeilToInt(fPicture->height() * fScaleFactor); 203 int height = SkScalarCeilToInt(fPicture->cullRect().height() * fScaleFactor) ;
204 if (fViewport.height() > 0) { 204 if (fViewport.height() > 0) {
205 height = SkMin32(height, fViewport.height()); 205 height = SkMin32(height, fViewport.height());
206 } 206 }
207 return height; 207 return height;
208 } 208 }
209 209
210 /** Converts fPicture to a picture that uses a BBoxHierarchy. 210 /** Converts fPicture to a picture that uses a BBoxHierarchy.
211 * PictureRenderer subclasses that are used to test picture playback 211 * PictureRenderer subclasses that are used to test picture playback
212 * should call this method during init. 212 * should call this method during init.
213 */ 213 */
214 void PictureRenderer::buildBBoxHierarchy() { 214 void PictureRenderer::buildBBoxHierarchy() {
215 SkASSERT(NULL != fPicture); 215 SkASSERT(NULL != fPicture);
216 if (kNone_BBoxHierarchyType != fBBoxHierarchyType && NULL != fPicture) { 216 if (kNone_BBoxHierarchyType != fBBoxHierarchyType && NULL != fPicture) {
217 SkAutoTDelete<SkBBHFactory> factory(this->getFactory()); 217 SkAutoTDelete<SkBBHFactory> factory(this->getFactory());
218 SkPictureRecorder recorder; 218 SkPictureRecorder recorder;
219 SkCanvas* canvas = recorder.beginRecording(fPicture->width(), fPicture-> height(), 219 SkCanvas* canvas = recorder.beginRecording(fPicture->cullRect().width(),
220 fPicture->cullRect().height() ,
220 factory.get(), 221 factory.get(),
221 this->recordFlags()); 222 this->recordFlags());
222 fPicture->draw(canvas); 223 fPicture->draw(canvas);
223 fPicture.reset(recorder.endRecording()); 224 fPicture.reset(recorder.endRecording());
224 } 225 }
225 } 226 }
226 227
227 void PictureRenderer::resetState(bool callFinish) { 228 void PictureRenderer::resetState(bool callFinish) {
228 #if SK_SUPPORT_GPU 229 #if SK_SUPPORT_GPU
229 SkGLContextHelper* glContext = this->getGLContext(); 230 SkGLContextHelper* glContext = this->getGLContext();
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 } 349 }
349 350
350 // the size_t* parameter is deprecated, so we ignore it 351 // the size_t* parameter is deprecated, so we ignore it
351 static SkData* encode_bitmap_to_data(size_t*, const SkBitmap& bm) { 352 static SkData* encode_bitmap_to_data(size_t*, const SkBitmap& bm) {
352 return SkImageEncoder::EncodeData(bm, SkImageEncoder::kPNG_Type, 100); 353 return SkImageEncoder::EncodeData(bm, SkImageEncoder::kPNG_Type, 100);
353 } 354 }
354 355
355 bool RecordPictureRenderer::render(SkBitmap** out) { 356 bool RecordPictureRenderer::render(SkBitmap** out) {
356 SkAutoTDelete<SkBBHFactory> factory(this->getFactory()); 357 SkAutoTDelete<SkBBHFactory> factory(this->getFactory());
357 SkPictureRecorder recorder; 358 SkPictureRecorder recorder;
358 SkCanvas* canvas = recorder.beginRecording(this->getViewWidth(), this->getVi ewHeight(), 359 SkCanvas* canvas = recorder.beginRecording(SkIntToScalar(this->getViewWidth( )),
360 SkIntToScalar(this->getViewHeight ()),
359 factory.get(), 361 factory.get(),
360 this->recordFlags()); 362 this->recordFlags());
361 this->scaleToScaleFactor(canvas); 363 this->scaleToScaleFactor(canvas);
362 fPicture->draw(canvas); 364 fPicture->draw(canvas);
363 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 365 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
364 if (!fWritePath.isEmpty()) { 366 if (!fWritePath.isEmpty()) {
365 // Record the new picture as a new SKP with PNG encoded bitmaps. 367 // Record the new picture as a new SKP with PNG encoded bitmaps.
366 SkString skpPath = SkOSPath::Join(fWritePath.c_str(), fInputFilename.c_s tr()); 368 SkString skpPath = SkOSPath::Join(fWritePath.c_str(), fInputFilename.c_s tr());
367 SkFILEWStream stream(skpPath.c_str()); 369 SkFILEWStream stream(skpPath.c_str());
368 picture->serialize(&stream, &encode_bitmap_to_data); 370 picture->serialize(&stream, &encode_bitmap_to_data);
(...skipping 16 matching lines...) Expand all
385 } 387 }
386 388
387 PipeController pipeController(fCanvas.get()); 389 PipeController pipeController(fCanvas.get());
388 SkGPipeWriter writer; 390 SkGPipeWriter writer;
389 SkCanvas* pipeCanvas = writer.startRecording(&pipeController); 391 SkCanvas* pipeCanvas = writer.startRecording(&pipeController);
390 pipeCanvas->drawPicture(fPicture); 392 pipeCanvas->drawPicture(fPicture);
391 writer.endRecording(); 393 writer.endRecording();
392 fCanvas->flush(); 394 fCanvas->flush();
393 if (NULL != out) { 395 if (NULL != out) {
394 *out = SkNEW(SkBitmap); 396 *out = SkNEW(SkBitmap);
395 setup_bitmap(*out, fPicture->width(), fPicture->height()); 397 setup_bitmap(*out, SkScalarCeilToInt(fPicture->cullRect().width()),
398 SkScalarCeilToInt(fPicture->cullRect().height()));
396 fCanvas->readPixels(*out, 0, 0); 399 fCanvas->readPixels(*out, 0, 0);
397 } 400 }
398 if (fEnableWrites) { 401 if (fEnableWrites) {
399 return write(fCanvas, fWritePath, fMismatchPath, fInputFilename, fJsonSu mmaryPtr, 402 return write(fCanvas, fWritePath, fMismatchPath, fInputFilename, fJsonSu mmaryPtr,
400 fUseChecksumBasedFilenames); 403 fUseChecksumBasedFilenames);
401 } else { 404 } else {
402 return true; 405 return true;
403 } 406 }
404 } 407 }
405 408
(...skipping 14 matching lines...) Expand all
420 SkASSERT(fCanvas.get() != NULL); 423 SkASSERT(fCanvas.get() != NULL);
421 SkASSERT(NULL != fPicture); 424 SkASSERT(NULL != fPicture);
422 if (NULL == fCanvas.get() || NULL == fPicture) { 425 if (NULL == fCanvas.get() || NULL == fPicture) {
423 return false; 426 return false;
424 } 427 }
425 428
426 fCanvas->drawPicture(fPicture); 429 fCanvas->drawPicture(fPicture);
427 fCanvas->flush(); 430 fCanvas->flush();
428 if (NULL != out) { 431 if (NULL != out) {
429 *out = SkNEW(SkBitmap); 432 *out = SkNEW(SkBitmap);
430 setup_bitmap(*out, fPicture->width(), fPicture->height()); 433 setup_bitmap(*out, SkScalarCeilToInt(fPicture->cullRect().width()),
434 SkScalarCeilToInt(fPicture->cullRect().height()));
431 fCanvas->readPixels(*out, 0, 0); 435 fCanvas->readPixels(*out, 0, 0);
432 } 436 }
433 if (fEnableWrites) { 437 if (fEnableWrites) {
434 return write(fCanvas, fWritePath, fMismatchPath, fInputFilename, fJsonSu mmaryPtr, 438 return write(fCanvas, fWritePath, fMismatchPath, fInputFilename, fJsonSu mmaryPtr,
435 fUseChecksumBasedFilenames); 439 fUseChecksumBasedFilenames);
436 } else { 440 } else {
437 return true; 441 return true;
438 } 442 }
439 } 443 }
440 444
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 // Do not call INHERITED::init(), which would create a (potentially large) c anvas which is not 476 // Do not call INHERITED::init(), which would create a (potentially large) c anvas which is not
473 // used by bench_pictures. 477 // used by bench_pictures.
474 fPicture.reset(pict)->ref(); 478 fPicture.reset(pict)->ref();
475 this->CopyString(&fWritePath, writePath); 479 this->CopyString(&fWritePath, writePath);
476 this->CopyString(&fMismatchPath, mismatchPath); 480 this->CopyString(&fMismatchPath, mismatchPath);
477 this->CopyString(&fInputFilename, inputFilename); 481 this->CopyString(&fInputFilename, inputFilename);
478 fUseChecksumBasedFilenames = useChecksumBasedFilenames; 482 fUseChecksumBasedFilenames = useChecksumBasedFilenames;
479 this->buildBBoxHierarchy(); 483 this->buildBBoxHierarchy();
480 484
481 if (fTileWidthPercentage > 0) { 485 if (fTileWidthPercentage > 0) {
482 fTileWidth = sk_float_ceil2int(float(fTileWidthPercentage * fPicture->wi dth() / 100)); 486 fTileWidth = SkScalarCeilToInt(float(fTileWidthPercentage * fPicture->cu llRect().width() / 100));
483 } 487 }
484 if (fTileHeightPercentage > 0) { 488 if (fTileHeightPercentage > 0) {
485 fTileHeight = sk_float_ceil2int(float(fTileHeightPercentage * fPicture-> height() / 100)); 489 fTileHeight = SkScalarCeilToInt(float(fTileHeightPercentage * fPicture-> cullRect().height() / 100));
486 } 490 }
487 491
488 if (fTileMinPowerOf2Width > 0) { 492 if (fTileMinPowerOf2Width > 0) {
489 this->setupPowerOf2Tiles(); 493 this->setupPowerOf2Tiles();
490 } else { 494 } else {
491 this->setupTiles(); 495 this->setupTiles();
492 } 496 }
493 fCanvas.reset(this->setupCanvas(fTileWidth, fTileHeight)); 497 fCanvas.reset(this->setupCanvas(fTileWidth, fTileHeight));
494 // Initialize to -1 so that the first call to nextTile will set this up to d raw tile 0 on the 498 // Initialize to -1 so that the first call to nextTile will set this up to d raw tile 0 on the
495 // first call to drawCurrentTile. 499 // first call to drawCurrentTile.
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 644
641 bool TiledPictureRenderer::render(SkBitmap** out) { 645 bool TiledPictureRenderer::render(SkBitmap** out) {
642 SkASSERT(fPicture != NULL); 646 SkASSERT(fPicture != NULL);
643 if (NULL == fPicture) { 647 if (NULL == fPicture) {
644 return false; 648 return false;
645 } 649 }
646 650
647 SkBitmap bitmap; 651 SkBitmap bitmap;
648 if (out){ 652 if (out){
649 *out = SkNEW(SkBitmap); 653 *out = SkNEW(SkBitmap);
650 setup_bitmap(*out, fPicture->width(), fPicture->height()); 654 setup_bitmap(*out, SkScalarCeilToInt(fPicture->cullRect().width()),
655 SkScalarCeilToInt(fPicture->cullRect().height()));
651 setup_bitmap(&bitmap, fTileWidth, fTileHeight); 656 setup_bitmap(&bitmap, fTileWidth, fTileHeight);
652 } 657 }
653 bool success = true; 658 bool success = true;
654 for (int i = 0; i < fTileRects.count(); ++i) { 659 for (int i = 0; i < fTileRects.count(); ++i) {
655 draw_tile_to_canvas(fCanvas, fTileRects[i], fPicture); 660 draw_tile_to_canvas(fCanvas, fTileRects[i], fPicture);
656 if (fEnableWrites) { 661 if (fEnableWrites) {
657 success &= write(fCanvas, fWritePath, fMismatchPath, fInputFilename, fJsonSummaryPtr, 662 success &= write(fCanvas, fWritePath, fMismatchPath, fInputFilename, fJsonSummaryPtr,
658 fUseChecksumBasedFilenames, &i); 663 fUseChecksumBasedFilenames, &i);
659 } 664 }
660 if (NULL != out) { 665 if (NULL != out) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
705 name.appendf("%i", fTileHeight); 710 name.appendf("%i", fTileHeight);
706 } 711 }
707 return name; 712 return name;
708 } 713 }
709 714
710 //////////////////////////////////////////////////////////////////////////////// /////////////// 715 //////////////////////////////////////////////////////////////////////////////// ///////////////
711 716
712 void PlaybackCreationRenderer::setup() { 717 void PlaybackCreationRenderer::setup() {
713 SkAutoTDelete<SkBBHFactory> factory(this->getFactory()); 718 SkAutoTDelete<SkBBHFactory> factory(this->getFactory());
714 fRecorder.reset(SkNEW(SkPictureRecorder)); 719 fRecorder.reset(SkNEW(SkPictureRecorder));
715 SkCanvas* canvas = fRecorder->beginRecording(this->getViewWidth(), this->get ViewHeight(), 720 SkCanvas* canvas = fRecorder->beginRecording(SkIntToScalar(this->getViewWidt h()),
721 SkIntToScalar(this->getViewHeig ht()),
716 factory.get(), 722 factory.get(),
717 this->recordFlags()); 723 this->recordFlags());
718 this->scaleToScaleFactor(canvas); 724 this->scaleToScaleFactor(canvas);
719 canvas->drawPicture(fPicture); 725 canvas->drawPicture(fPicture);
720 } 726 }
721 727
722 bool PlaybackCreationRenderer::render(SkBitmap** out) { 728 bool PlaybackCreationRenderer::render(SkBitmap** out) {
723 fPicture.reset(fRecorder->endRecording()); 729 fPicture.reset(fRecorder->endRecording());
724 // Since this class does not actually render, return false. 730 // Since this class does not actually render, return false.
725 return false; 731 return false;
(...skipping 21 matching lines...) Expand all
747 753
748 /////////////////////////////////////////////////////////////////////////////// 754 ///////////////////////////////////////////////////////////////////////////////
749 755
750 class GatherRenderer : public PictureRenderer { 756 class GatherRenderer : public PictureRenderer {
751 public: 757 public:
752 #if SK_SUPPORT_GPU 758 #if SK_SUPPORT_GPU
753 GatherRenderer(const GrContext::Options& opts) : INHERITED(opts) { } 759 GatherRenderer(const GrContext::Options& opts) : INHERITED(opts) { }
754 #endif 760 #endif
755 761
756 virtual bool render(SkBitmap** out = NULL) SK_OVERRIDE { 762 virtual bool render(SkBitmap** out = NULL) SK_OVERRIDE {
757 SkRect bounds = SkRect::MakeWH(SkIntToScalar(fPicture->width()), 763 SkRect bounds = SkRect::MakeWH(SkIntToScalar(fPicture->cullRect().width( )),
758 SkIntToScalar(fPicture->height())); 764 SkIntToScalar(fPicture->cullRect().height ()));
759 SkData* data = SkPictureUtils::GatherPixelRefs(fPicture, bounds); 765 SkData* data = SkPictureUtils::GatherPixelRefs(fPicture, bounds);
760 SkSafeUnref(data); 766 SkSafeUnref(data);
761 767
762 return (fWritePath.isEmpty()); // we don't have anything to write 768 return (fWritePath.isEmpty()); // we don't have anything to write
763 } 769 }
764 770
765 private: 771 private:
766 virtual SkString getConfigNameInternal() SK_OVERRIDE { 772 virtual SkString getConfigNameInternal() SK_OVERRIDE {
767 return SkString("gather_pixelrefs"); 773 return SkString("gather_pixelrefs");
768 } 774 }
769 775
770 typedef PictureRenderer INHERITED; 776 typedef PictureRenderer INHERITED;
771 }; 777 };
772 778
773 #if SK_SUPPORT_GPU 779 #if SK_SUPPORT_GPU
774 PictureRenderer* CreateGatherPixelRefsRenderer(const GrContext::Options& opts) { 780 PictureRenderer* CreateGatherPixelRefsRenderer(const GrContext::Options& opts) {
775 return SkNEW_ARGS(GatherRenderer, (opts)); 781 return SkNEW_ARGS(GatherRenderer, (opts));
776 } 782 }
777 #else 783 #else
778 PictureRenderer* CreateGatherPixelRefsRenderer() { 784 PictureRenderer* CreateGatherPixelRefsRenderer() {
779 return SkNEW(GatherRenderer); 785 return SkNEW(GatherRenderer);
780 } 786 }
781 #endif 787 #endif
782 788
783 } // namespace sk_tools 789 } // namespace sk_tools
OLDNEW
« no previous file with comments | « tests/SerializationTest.cpp ('k') | tools/bench_pictures_main.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698