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

Unified Diff: Source/web/ImageDecodeBench.cpp

Issue 1318713005: Change the way ImageDecodeBench supplies data (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@ImageSource2
Patch Set: Respond to Noel's comments in patch set 4 Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/web/ImageDecodeBench.cpp
diff --git a/Source/web/ImageDecodeBench.cpp b/Source/web/ImageDecodeBench.cpp
index 2f6f2b47c90d68347c208ef1f0e10f18f6444e69..98f7fa12be195937213699d4b61f55a1bbf9ff9e 100644
--- a/Source/web/ImageDecodeBench.cpp
+++ b/Source/web/ImageDecodeBench.cpp
@@ -15,11 +15,6 @@ during image decoding on supported platforms (default off). Usage:
FIXME: Consider adding md5 checksum support to WTF. Use it to compute the
decoded image frame md5 and output that value.
-FIXME: Consider adding an input data packetization option. Break the input
-into network-sized packets, pump the packets into the image decoder until
-the input data is complete (allDataReceived). This to include any internal
-SharedBuffer costs, such as buffer coalescing, in the reported results.
-
FIXME: Consider integrating this tool in Chrome telemetry for realz, using
the image corpii used to assess Blink image decode performance. Refer to
http://crbug.com/398235#c103 and http://crbug.com/258324#c5
@@ -270,19 +265,46 @@ PassRefPtr<SharedBuffer> readFile(const char* fileName)
return SharedBuffer::create(buffer.get(), fileSize);
}
-bool decodeImageData(SharedBuffer* data, bool colorCorrection)
+bool decodeImageData(SharedBuffer* data, bool colorCorrection, size_t packetSize)
{
OwnPtr<ImageDecoder> decoder = ImageDecoder::create(*data,
ImageDecoder::AlphaPremultiplied, colorCorrection ?
ImageDecoder::GammaAndColorProfileApplied : ImageDecoder::GammaAndColorProfileIgnored);
- bool allDataReceived = true;
- decoder->setData(data, allDataReceived);
+ if (!packetSize) {
+ bool allDataReceived = true;
+ decoder->setData(data, allDataReceived);
+
+ int frameCount = decoder->frameCount();
+ for (int i = 0; i < frameCount; ++i) {
+ if (!decoder->frameBufferAtIndex(i))
+ return false;
+ }
+
+ return !decoder->failed();
+ }
+
+ RefPtr<SharedBuffer> packetData = SharedBuffer::create();
+ unsigned position = 0;
+ while (true) {
+ const char* packet;
+ unsigned length = data->getSomeData(packet, position);
+
+ length = std::min(static_cast<size_t>(length), packetSize);
+ packetData->append(packet, length);
+ position += length;
+
+ bool allDataReceived = position == data->size();
+ decoder->setData(packetData.get(), allDataReceived);
- int frameCount = decoder->frameCount();
- for (int i = 0; i < frameCount; ++i) {
- if (!decoder->frameBufferAtIndex(i))
- return false;
+ int frameCount = decoder->frameCount();
+ for (int i = 0; i < frameCount; ++i) {
+ if (!decoder->frameBufferAtIndex(i))
+ break;
+ }
+
+ if (allDataReceived || decoder->failed())
+ break;
}
return !decoder->failed();
@@ -301,17 +323,17 @@ int main(int argc, char* argv[])
applyColorCorrection = (--argc, ++argv, true);
if (argc < 2) {
- fprintf(stderr, "Usage: %s [--color-correct] file [iterations]\n", name);
+ fprintf(stderr, "Usage: %s [--color-correct] file [iterations] [packetSize]\n", name);
exit(1);
}
#else
if (argc < 2) {
- fprintf(stderr, "Usage: %s file [iterations]\n", name);
+ fprintf(stderr, "Usage: %s file [iterations] [packetSize]\n", name);
exit(1);
}
#endif
- // Control decode bench iterations.
+ // Control decode bench iterations and packet size.
size_t iterations = 1;
if (argc >= 3) {
@@ -324,6 +346,18 @@ int main(int argc, char* argv[])
}
}
+ size_t packetSize = 0;
+ if (argc >= 4) {
+ char* end = 0;
+ packetSize = strtol(argv[3], &end, 10);
+ if (*end != '\0') {
+ fprintf(stderr, "Third argument should be packet size. Default is "
+ "0, meaning to decode the entire image in one packet. You "
+ "supplied %s\n", argv[3]);
+ exit(1);
+ }
+ }
+
// Create a web platform without V8.
class WebPlatform : public blink::Platform {
@@ -360,13 +394,16 @@ int main(int argc, char* argv[])
exit(2);
}
+ // Consolidate the SharedBuffer data segments into one, contiguous block of memory.
+ data->data();
+
// Image decode bench for iterations.
double totalTime = 0.0;
for (size_t i = 0; i < iterations; ++i) {
double startTime = getCurrentTime();
- bool decoded = decodeImageData(data.get(), applyColorCorrection);
+ bool decoded = decodeImageData(data.get(), applyColorCorrection, packetSize);
double elapsedTime = getCurrentTime() - startTime;
totalTime += elapsedTime;
if (!decoded) {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698