Commit Graph

51 Commits

Author SHA1 Message Date
scroggo@google.com
f8d7d27313 Create SkLazyPixelRef which performs lazy decoding.
The new pixel ref behaves similarly to SkImageRef, with some key differences:
It does not depend on the images project.
It requires an SkImageCache, which handles allocation and caching of the pixel
memory.
It takes a function signature for decoding which decodes into already allocated
pixel memory rather than into an SkBitmap.

Add two implementations of SkImageCache: SkLruImageCache and SkAshmemImageCache.

Replace SkSerializationHelpers::DecodeBitmap with SkPicture::InstallPixelRefProc,
and update sites that referenced it.

SkBitmapFactory now sets the pixel ref to a new object of the new
class SkLazyPixelRef, provided it has an SkImageCache for caching.

Provide an option to do lazy decodes in render_pictures and bench_pictures.

SkPicture:
Eliminate the default parameters in the constructor.
If a proc for decoding bitmaps is installed, use it to decode any encoded
data in subpictures.
When parsing deserializing subpictures, check for success.
When serializing subpictures, pass the picture's bitmap encoder to the
subpicture's call to serialize.

Update BitmapFactoryTest to test its new behavior.

BUG=https://code.google.com/p/skia/issues/detail?id=1008
BUG=https://code.google.com/p/skia/issues/detail?id=1009

Review URL: https://codereview.appspot.com/7060052

git-svn-id: http://skia.googlecode.com/svn/trunk@7835 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-02-22 21:38:35 +00:00
scroggo@google.com
0556ea0ede Add support for using ANGLE in bench_pictures.
BUG=https://code.google.com/p/skia/issues/detail?id=1012

Other cleanups:
Remove setDeviceType from PictureBenchmark, since it is unnecessary.
Dereference PictureRenderer::fGrContext when done with it.
Make PictureRenderer::fGrContext and PictureRenderer::fGrContextFactory private, since they are not used by subclasses.

Review URL: https://codereview.appspot.com/7314063

git-svn-id: http://skia.googlecode.com/svn/trunk@7677 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-02-08 19:38:21 +00:00
scroggo@google.com
08085f808b Change the method for timing individual tiles in bench_pictures.
When timing individual tiles in bench_pictures, keep a timer running
across all repeats, and then take the average. The former method of
timing each iteration separately runs into precision errors on some
platforms.

Running on my Mac Pro with OSX 10.8, the cmsecs for the new method
and the old method are roughly the same when checking the CPU time.
When checking the wall time, the old method often gives me 0ms,
while the new method gives me a larger value. I don't think this
can be entirely attributed to rounding though, since on occasion I
see the old method showing a short time period (.05 - .15ms) while
the new method shows .15ms higher (which is in range for the
difference I'm seeing for other tiles where the old method reports
0ms).

Some other changes:
PictureRenderer::resetState now takes a boolean parameter. If called
with false, it will only do a flush, while if called with true, it
will also call finish.

resetState is now called with true everywhere except in between
iterations of drawing the same tile (when timing individual tiles).

render_pictures_main no longer calls resetState directly, since it
already calls end, which calls resetState.

BUG=http://code.google.com/p/skia/issues/detail?id=1066

Review URL: https://codereview.appspot.com/7101060

git-svn-id: http://skia.googlecode.com/svn/trunk@7424 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-01-28 20:40:24 +00:00
skia.committer@gmail.com
4d28d9889b Sanitizing source files in Skia_Periodic_House_Keeping
git-svn-id: http://skia.googlecode.com/svn/trunk@7240 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-01-17 07:06:06 +00:00
edisonn@google.com
ca1b3ff634 Add option to ignore small pixel diffs for --validate. By default, right
now we will default to max diff of 256, which means that for now we
report all pixels that are not as expected and we do not error out.
Ideally we will decrease the value of max diff to something that does
not have visual impact, e.g. 10, then we will report small changes with
the intensity under 10, but we will error out for anything larger.
Review URL: https://codereview.appspot.com/7137046

git-svn-id: http://skia.googlecode.com/svn/trunk@7232 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-01-16 18:18:48 +00:00
edisonn@google.com
ddbd83a1e9 revert change 7218
git-svn-id: http://skia.googlecode.com/svn/trunk@7220 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-01-16 15:03:24 +00:00
edisonn@google.com
d17c865634 Add option to ignore small pixel diffs for --validate. By default, right now we will default to max diff of 256, which means that for now we report all pixels that are not as expected and we do not error out. Ideally we will decrease the value of max diff to something that does not have visual impact, e.g. 10, then we will report small changes with the intensity under 10, but we will error out for anything larger.
Review URL: https://codereview.appspot.com/7139043

git-svn-id: http://skia.googlecode.com/svn/trunk@7218 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-01-16 14:47:06 +00:00
reed@google.com
f14e4b0482 Add VALIDATE_FAILURE_IS_A_TOOL_FAILURE to specify whether a failure in validation
means the tool should return failure or not. For now it is not defined, which
means any failed pixels are still reported to stdout, but the tool does not
return an error, allowing the bots to go green (until we can fix these failures).
Review URL: https://codereview.appspot.com/7105056

git-svn-id: http://skia.googlecode.com/svn/trunk@7211 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-01-15 21:54:27 +00:00
edisonn@google.com
01754bfd9d Fix typo, report in validate diff teh value of the pixel, not the address of the pixel.
git-svn-id: http://skia.googlecode.com/svn/trunk@7135 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-01-11 16:08:07 +00:00
reed@google.com
89d15a28b5 fix warnings
Review URL: https://codereview.appspot.com/7060053

git-svn-id: http://skia.googlecode.com/svn/trunk@7070 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-01-07 22:26:05 +00:00
skia.committer@gmail.com
a7d8e3e990 Sanitizing source files in Skia_Periodic_House_Keeping
git-svn-id: http://skia.googlecode.com/svn/trunk@6891 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-12-19 02:01:38 +00:00
edisonn@google.com
84f548cc9d Flags for render_pictures: verify, clone and writeWholeImage:
1) flag to verify PNGs produced by render_picture that produce the same pixels
as simple renderer.
2) flag to write one single image (in tile we write individual tiles) - this
will help running skdiff also
3) flag to clone the picture before rendering

git-svn-id: http://skia.googlecode.com/svn/trunk@6890 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-12-18 22:24:03 +00:00
scroggo@google.com
82ec0b00f3 Allow setting a scaleFactor in bench_pictures (and render_pictures).
In TiledPictureRenderer and CopyTilesRenderer, do a postTranslate so
the translate is not affected by the scale factor.

Likewise, use clipRegion for tiled renderer so it will be
unaffected by the scale factor.

Respect the viewport for record, playbackCreation, and pipe renderers.

Review URL: https://codereview.appspot.com/6947072

git-svn-id: http://skia.googlecode.com/svn/trunk@6853 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-12-17 19:25:54 +00:00
scroggo@google.com
c0d5e549ab Allow bench_pictures to have its viewport set on the command line.
Instead of drawing the entire (potentially very large) picture, only
draw one viewport's worth.

example:

bench_pictures <skp directory> --viewport 640 480

BUG=https://code.google.com/p/skia/issues/detail?id=1007

Review URL: https://codereview.appspot.com/6943052

git-svn-id: http://skia.googlecode.com/svn/trunk@6799 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-12-13 21:40:48 +00:00
scroggo@google.com
4a26d9d62a Add a new PictureRenderer that draws the picture then breaks up into tiles.
Review URL: https://codereview.appspot.com/6820103

git-svn-id: http://skia.googlecode.com/svn/trunk@6333 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-11-07 18:01:46 +00:00
scroggo@google.com
a9e3a369c1 Add an option to render_pictures to rerecord the pictures with PNG encoded bitmaps.
Review URL: https://codereview.appspot.com/6821092

git-svn-id: http://skia.googlecode.com/svn/trunk@6332 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-11-07 17:52:48 +00:00
scroggo@google.com
a62da2fee7 In bench_pictures --multi, maintain thread local caches.
Builds on https://codereview.appspot.com/6718046/ by mtklein.

Previously, each iteration of drawing a picture started new threads to draw the picture. Since each thread is using thread local storage for the font cache, this means that each iteration had to start with an empty font cache.

The newly added MultiCorePictureRenderer, separated from TiledPictureRenderer, now starts the drawing threads at the beginning of the test using an SkThreadPool, and keeps them alive through all iterations, so the font cache can be reused.

For now, I have removed the pipe version of the threaded renderer.

Updated bench_pictures_main and render_pictures_main to use the new
renderer, and to unref a renderer before early exit.

Review URL: https://codereview.appspot.com/6777063

git-svn-id: http://skia.googlecode.com/svn/trunk@6285 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-11-02 21:28:12 +00:00
borenet@google.com
070d354d51 Make output path to render_pictures optional
Review URL: https://codereview.appspot.com/6779049

git-svn-id: http://skia.googlecode.com/svn/trunk@6136 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-10-26 13:26:55 +00:00
scroggo@google.com
5a7c6be72b Add the ability to provide function pointers to SkPicture serialization
and deserialization for encoding and decoding bitmaps.

Remove kForceFlattenBitmapPixels_Flag, which is no longer used.

When an SkOrderedReadBuffer needs to read a bitmap, if it does not
have an image decoder, use a dummy bitmap.

In GM, add a tolerance option for color differences, used when
testing picture serialization, so it can assume two images are the
same even though PNG encoding/decoding may have resulted in small
differences.

Create dummy implementations for SkImageDecoder and SkImageEncoder
functions in SkImageDecoder_empty so that a project that does not
want to include the images project it can still build.

Allow ports to build without images project.

In Mac's image encoder, copy 4444 to 8888 before encoding.

Add SkWriter32::reservePad, to provide a pointer to write non 4 byte
aligned data, padded with zeroes.

In bench_ and render_ pictures, pass decode function to SkPicture
creation from a stream.

BUG=https://code.google.com/p/skia/issues/detail?id=842

Review URL: https://codereview.appspot.com/6551071

git-svn-id: http://skia.googlecode.com/svn/trunk@5818 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-10-04 21:46:08 +00:00
scroggo@google.com
b6e806bf17 Allow render_pictures to render using multiple threads.
Make write() a static function so it can be used by the
thread entry functions.

Add a helper function to append a number to a string and
call write to share code.

Review URL: https://codereview.appspot.com/6589062

git-svn-id: http://skia.googlecode.com/svn/trunk@5789 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-10-03 17:32:33 +00:00
caryclark@google.com
868e1f682e fix return value for render_pictures
Review URL: https://codereview.appspot.com/6590049

git-svn-id: http://skia.googlecode.com/svn/trunk@5779 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-10-02 20:00:03 +00:00
caryclark@google.com
5987f58036 build iOS with 'make all'
This builds all skia tests by treating iOS tools
as executable applications. A few warnings were
fixed as well.

Removed old trace draw code and remnants.
Review URL: https://codereview.appspot.com/6597063

git-svn-id: http://skia.googlecode.com/svn/trunk@5776 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-10-02 18:33:14 +00:00
scroggo@google.com
b4773b4802 Fix some bugs in our picture tools.
When doing tiled rendering in multiple threads, clone fPicture,
rather than the blank fPictureClones. Also fix a precedence
problem so we get the correct rectangle.

In render_pictures_main, call PictureRenderer::setup().

Review URL: https://codereview.appspot.com/6585055

git-svn-id: http://skia.googlecode.com/svn/trunk@5758 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-10-01 20:06:09 +00:00
borenet@google.com
2d2b9a0d8c Remove automatic resizing in *_pictures
Review URL: https://codereview.appspot.com/6554045

git-svn-id: http://skia.googlecode.com/svn/trunk@5614 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-09-20 18:54:04 +00:00
scroggo@google.com
81f9d2e05b In render_pictures tiled rendering, draw a separate PNG for each tile.
Since the passed in picture may represent an image which is too large
to be represented on the GPU, never create such a large canvas. Instead,
after drawing to each tile, create a file showing just that tile.

Review URL: https://codereview.appspot.com/6532056

git-svn-id: http://skia.googlecode.com/svn/trunk@5603 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-09-20 14:54:21 +00:00
borenet@google.com
57837bff3d Skip empty directories and input files not ending in .skp in *_pictures
Addressing https://code.google.com/p/skia/issues/detail?id=886
Review URL: https://codereview.appspot.com/6531047

git-svn-id: http://skia.googlecode.com/svn/trunk@5597 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-09-19 17:28:29 +00:00
borenet@google.com
66bcbd12bf Check for invalid SkPictures
- Remove hasRecorded() since nobody uses it.
- Add "success" boolean to SkPicture stream constructor
- Track failures in render_pictures and bench_pictures
Review URL: https://codereview.appspot.com/6493105

git-svn-id: http://skia.googlecode.com/svn/trunk@5573 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-09-17 18:26:06 +00:00
borenet@google.com
e21795e277 Enable automatic rescaling in bench_pictures
bench_pictures with "--device gpu" is failing because we're trying to allocate
too much GPU memory.  Move the recently-added scaling code into picture_utils
and share it between render_pictures and bench_pictures.
Review URL: https://codereview.appspot.com/6495125

git-svn-id: http://skia.googlecode.com/svn/trunk@5543 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-09-14 14:34:28 +00:00
skia.committer@gmail.com
1d225f2b33 Sanitizing source files in Skia_Periodic_House_Keeping
git-svn-id: http://skia.googlecode.com/svn/trunk@5539 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-09-14 02:01:10 +00:00
reed@google.com
e04e92b19f To avoid running out of memory, we rescale very large pictures before we
render them.
Review URL: https://codereview.appspot.com/6504045

git-svn-id: http://skia.googlecode.com/svn/trunk@5530 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-09-13 17:44:32 +00:00
robertphillips@google.com
163c84ba50 Added GPU resource cache stats printing to render_pictures
https://codereview.appspot.com/6492104/



git-svn-id: http://skia.googlecode.com/svn/trunk@5523 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-09-13 15:40:37 +00:00
borenet@google.com
03fcee8164 Add per-picture logging to render_pictures
This will be helpful for debugging crashes
Review URL: https://codereview.appspot.com/6495112

git-svn-id: http://skia.googlecode.com/svn/trunk@5469 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-09-10 18:18:38 +00:00
borenet@google.com
10ef79ec95 Fix render_pictures for skia_static_initializers=0
Review URL: https://codereview.appspot.com/6500097

git-svn-id: http://skia.googlecode.com/svn/trunk@5465 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-09-10 17:19:06 +00:00
scroggo@google.com
9a4125283a Report data from bench_pictures in the same fashion as bench.
Move SkBenchLogger into separate files and make bench_pictures use it.
Remove sk_tools::print_msg, since SkBenchLogger is now used instead.

Combine picture_benchmark with bench_pictures, since that is the
only project that uses it.

Refactor the aggregator for bench timer data into its own class and
make bench_pictures use it.

Consolidate the various virtual PictureBenchmark::run functions
into one for reuse.

BUG=https://code.google.com/p/skia/issues/detail?id=822

Review URL: https://codereview.appspot.com/6488086

git-svn-id: http://skia.googlecode.com/svn/trunk@5432 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-09-07 15:21:18 +00:00
keyar@chromium.org
f4959ab118 Implemented power of two tiling.
Review URL: https://codereview.appspot.com/6485056

git-svn-id: http://skia.googlecode.com/svn/trunk@5274 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-08-23 20:53:25 +00:00
keyar@chromium.org
9299eded38 Images are written by PictureRenderer and not render_pictures_main.
Review URL: https://codereview.appspot.com/6448174

git-svn-id: http://skia.googlecode.com/svn/trunk@5216 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-08-21 19:05:08 +00:00
keyar@chromium.org
a40c20df0e Fixed up SK_SUPPORT_GPU flags.
git-svn-id: http://skia.googlecode.com/svn/trunk@5186 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-08-20 15:04:12 +00:00
keyar@chromium.org
c81686cd6e Added the option to enable GPU rendering on render_ and bench_pictures.
git-svn-id: http://skia.googlecode.com/svn/trunk@5183 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-08-20 15:04:04 +00:00
keyar@chromium.org
4ea96c5e54 Dirty commit so Brian can see changes.
git-svn-id: http://skia.googlecode.com/svn/trunk@5171 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-08-20 15:03:29 +00:00
keyar@chromium.org
9d696c0d04 Refactored the bitmap creation into PictureRenderer.
Further, the picture is also stored in the PictureRenderer.

The main gain of all of this is that we will not have to change how the device in more than one place when we end up adding different devices.

Review URL: https://codereview.appspot.com/6458074

git-svn-id: http://skia.googlecode.com/svn/trunk@4990 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-08-07 17:11:33 +00:00
keyar@chromium.org
795cd47342 render_pictures and bench_pictures now use a --mode parameter.
This replaces the --tile, --pipe, etc. options from before as they are mutually exclusive.

Review URL: https://codereview.appspot.com/6443076

git-svn-id: http://skia.googlecode.com/svn/trunk@4930 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-08-02 18:57:53 +00:00
keyar@chromium.org
163b56734f Merged bench_pictures and render_pictures rendering methods.
bench_pictures now uses a class based method for choosing the benchmark type as well.

Review URL: https://codereview.appspot.com/6452070

git-svn-id: http://skia.googlecode.com/svn/trunk@4894 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-08-01 17:53:29 +00:00
keyar@chromium.org
cc6e5efe03 Added an option to specify the tiling size to render_pictures.
With this change I should be able to start merging the rendering implementations of bench_pictures and render_pictures.

Review URL: https://codereview.appspot.com/6427061

git-svn-id: http://skia.googlecode.com/svn/trunk@4816 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-07-27 20:09:26 +00:00
keyar@chromium.org
451bb9f801 Changed to a class based method in passing around the rendering method for render_pictures.
This is based on a comment for https://codereview.appspot.com/6427061/

Review URL: https://codereview.appspot.com/6405080

git-svn-id: http://skia.googlecode.com/svn/trunk@4786 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-07-26 17:27:57 +00:00
keyar@chromium.org
472b379b5b render_pictures can now do tiling based rendering.
Review URL: https://codereview.appspot.com/6401057

git-svn-id: http://skia.googlecode.com/svn/trunk@4707 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-07-20 22:34:27 +00:00
keyar@chromium.org
a2333d9703 Added pipe as a rendering option for render_pictures.
I will add tiling as a rendering option and then figure out a way to not have the code duplicated between render_pictures and bench_pictures.

Review URL: https://codereview.appspot.com/6392066

git-svn-id: http://skia.googlecode.com/svn/trunk@4626 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-07-16 17:29:16 +00:00
senorblanco@chromium.org
3cbbb543ef Mac build fix for Keyar. Unreviewed.
git-svn-id: http://skia.googlecode.com/svn/trunk@4607 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-07-13 18:55:53 +00:00
keyar@chromium.org
1cbd47c4b1 Preparations for adding options and different render types to render_pictures.
Review URL: https://codereview.appspot.com/6345107

git-svn-id: http://skia.googlecode.com/svn/trunk@4603 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-07-13 18:22:59 +00:00
keyar@chromium.org
d1dc920097 Allow specific files and multiple inputs for picture testing tools.
Changed the render_pictures, bench_pictures and test_pictures.py so that multiple inputs can be given. Furthermore, specific files can also be specified.

Unit tests have also been added for picture_utils.cpp.

Review URL: https://codereview.appspot.com/6345054

git-svn-id: http://skia.googlecode.com/svn/trunk@4486 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-07-09 18:32:08 +00:00
twiz@google.com
a31b8bb58d Refactoring in preparation for adding the picture benchmarking program.
Review URL: https://codereview.appspot.com/6339043/

git-svn-id: http://skia.googlecode.com/svn/trunk@4310 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-06-22 18:24:56 +00:00