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

Unified Diff: ppapi/tests/test_graphics_2d.cc

Issue 10823378: Cache image data objects. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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 side-by-side diff with in-line comments
Download patch
Index: ppapi/tests/test_graphics_2d.cc
diff --git a/ppapi/tests/test_graphics_2d.cc b/ppapi/tests/test_graphics_2d.cc
index f8f23f5900f80f7215a83df8e303c7ce21f829f2..9eeaa92c64489c658b48f5e4b3b0f74e3449532b 100644
--- a/ppapi/tests/test_graphics_2d.cc
+++ b/ppapi/tests/test_graphics_2d.cc
@@ -7,6 +7,8 @@
#include <stdlib.h>
#include <string.h>
+#include <set>
+
#include "ppapi/c/dev/ppb_testing_dev.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/c/ppb_graphics_2d.h"
@@ -53,6 +55,7 @@ void TestGraphics2D::RunTests(const std::string& filter) {
RUN_TEST_FORCEASYNC_AND_NOT(Replace, filter);
RUN_TEST_FORCEASYNC_AND_NOT(Flush, filter);
RUN_TEST(Dev, filter);
+ RUN_TEST(ReplaceContentsCaching, filter);
}
void TestGraphics2D::QuitMessageLoop() {
@@ -171,6 +174,21 @@ bool TestGraphics2D::IsSquareInDC(const pp::Graphics2D& dc,
return IsSquareInImage(readback, background_color, square, square_color);
}
+
+PP_Resource TestGraphics2D::ReplaceContentsAndReturnID(
+ pp::Graphics2D* dc,
+ const pp::Size& size) {
+ pp::ImageData image(instance_, PP_IMAGEDATAFORMAT_BGRA_PREMUL, size, true);
+
+ PP_Resource id = image.pp_resource();
+
+ dc->ReplaceContents(&image);
+ if (!FlushAndWaitForDone(dc))
+ return 0;
+
+ return id;
+}
+
// Test all the functions with an invalid handle. Most of these just check for
// a crash since the browser don't return a value.
std::string TestGraphics2D::TestInvalidResource() {
@@ -669,3 +687,45 @@ std::string TestGraphics2D::TestDev() {
PASS();
}
+
+// This test makes sure that the out-of-process image data caching works as
+// expected. Doing ReplaceContents quickly should re-use the image data from
+// older ones.
+std::string TestGraphics2D::TestReplaceContentsCaching() {
+ // The cache is only active when running in the proxy, so skip it otherwise.
+ if (!testing_interface_->IsOutOfProcess())
+ PASS();
+
+ // Here we test resource IDs as a way to determine if the resource is being
+ // cached and re-used. This is non-optimal since it's entirely possible
+ // (and maybe better) for the proxy to return new resource IDs for the
+ // re-used objects. Howevever, our current implementation does this so its
yzshen1 2012/08/21 23:42:44 its->it is
+ // an easy thing to check for.
+ //
+ // You could check for the shared memory pointers getting re-used, but the
+ // OS is very likely to use the same memory location for a newly-mapped image
+ // if one was deleted, meaning that it could pass even if the cache is broken.
+ // This would then require that we add some address-re-use-preventing code
+ // which would be tricky.
+ std::set<PP_Resource> resources;
+
+ pp::Size size(16, 16);
+ pp::Graphics2D dc(instance_, size, false);
+
+ // Do two replace contentses, adding the shared memory pointers to our map.
yzshen1 2012/08/21 23:42:44 please update the comment: we are not adding share
+ PP_Resource imageres = ReplaceContentsAndReturnID(&dc, size);
+ ASSERT_TRUE(imageres);
+ resources.insert(imageres);
+ imageres = ReplaceContentsAndReturnID(&dc, size);
+ ASSERT_TRUE(imageres);
+ resources.insert(imageres);
+
+ // Now doing more replace contents should re-use older pointers if the cache
+ // is working.
+ imageres = ReplaceContentsAndReturnID(&dc, size);
+ ASSERT_TRUE(resources.find(imageres) != resources.end());
+ imageres = ReplaceContentsAndReturnID(&dc, size);
+ ASSERT_TRUE(resources.find(imageres) != resources.end());
+
+ PASS();
+}

Powered by Google App Engine
This is Rietveld 408576698