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

Unified Diff: ppapi/tests/power_saver_test_plugin.cc

Issue 1114623002: Plugin Power Saver: Make PPS work well with prerendered pages. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
« no previous file with comments | « ppapi/proxy/ppb_testing_proxy.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/tests/power_saver_test_plugin.cc
diff --git a/ppapi/tests/power_saver_test_plugin.cc b/ppapi/tests/power_saver_test_plugin.cc
index f14c5fe5a807fc9c6867879b370ba1e08bbe3ff6..44aef4d9577b5f41f02d2111beed28b4d9fc4068 100644
--- a/ppapi/tests/power_saver_test_plugin.cc
+++ b/ppapi/tests/power_saver_test_plugin.cc
@@ -4,10 +4,10 @@
#include <algorithm>
+#include "ppapi/cpp/graphics_2d.h"
+#include "ppapi/cpp/image_data.h"
#include "ppapi/cpp/instance.h"
#include "ppapi/cpp/module.h"
-#include "ppapi/cpp/var.h"
-#include "ppapi/cpp/var_dictionary.h"
#include "ppapi/tests/test_utils.h"
// Windows defines 'PostMessage', so we have to undef it.
@@ -19,42 +19,58 @@
class PowerSaverTestInstance : public pp::Instance {
public:
explicit PowerSaverTestInstance(PP_Instance instance)
- : pp::Instance(instance), received_first_did_change_view_(false) {}
+ : pp::Instance(instance), callback_factory_(this) {}
~PowerSaverTestInstance() override {}
- // For browser tests, responds to:
- // - When postMessage("isPeripheral") is called on the plugin DOM element.
- // - When the plugin throttler posts a message notifying us that our
- // peripheral status has changed.
+ bool Init(uint32_t argc, const char* argn[], const char* argv[]) {
+ GetTestingInterface()->SubscribeToPowerSaverNotifications(pp_instance());
+ return true;
+ }
+
void HandleMessage(const pp::Var& message_data) override {
- if (message_data.is_string()) {
- if (message_data.AsString() == "getPeripheralStatus")
- BroadcastIsPeripheralStatus("getPeripheralStatusResponse");
- else if (message_data.AsString() == "peripheralStatusChange")
- BroadcastIsPeripheralStatus("peripheralStatusChange");
+ if (message_data.is_string() &&
+ message_data.AsString() == "getPowerSaverStatus") {
+ GetTestingInterface()->PostPowerSaverStatus(pp_instance());
}
}
// Broadcast our peripheral status after the initial view data. This is for
// tests that await initial plugin creation.
void DidChangeView(const pp::View& view) override {
- if (!received_first_did_change_view_) {
- BroadcastIsPeripheralStatus("initial");
- received_first_did_change_view_ = true;
- }
+ view_ = view;
+ device_context_ = pp::Graphics2D(this, view_.GetRect().size(), true);
+ if (!BindGraphics(device_context_))
+ return;
+
+ Paint();
}
+ void OnFlush(int32_t) { Paint(); }
+
private:
- void BroadcastIsPeripheralStatus(const std::string& source) {
- pp::VarDictionary message;
- message.Set(
- "isPeripheral",
- pp::Var(PP_ToBool(GetTestingInterface()->IsPeripheral(pp_instance()))));
- message.Set("source", pp::Var(source));
- PostMessage(message);
+ void Paint() {
+ pp::ImageData image(this, PP_IMAGEDATAFORMAT_BGRA_PREMUL,
+ view_.GetRect().size(), true);
+ if (image.is_null())
+ return;
+
+ // Draw black and white stripes to present an "interesting" keyframe.
+ for (int y = 0; y < view_.GetRect().size().height(); ++y) {
+ for (int x = 0; x < view_.GetRect().size().width(); ++x) {
+ uint32_t color = x % 2 ? 0xFF0000FF : 0xFFFFFFFF;
+ *image.GetAddr32(pp::Point(x, y)) = color;
+ }
+ }
+
+ device_context_.ReplaceContents(&image);
+ device_context_.Flush(
+ callback_factory_.NewCallback(&PowerSaverTestInstance::OnFlush));
}
- bool received_first_did_change_view_;
+ pp::View view_;
+ pp::Graphics2D device_context_;
+
+ pp::CompletionCallbackFactory<PowerSaverTestInstance> callback_factory_;
};
class PowerSaverTestModule : public pp::Module {
« no previous file with comments | « ppapi/proxy/ppb_testing_proxy.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698