Index: content/browser/renderer_host/render_widget_host_impl.cc |
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc |
index 497021c489534e12b7c8929e28e33c498c1bfadc..39877d1932baa10c8b25fd2213abebf1985f909a 100644 |
--- a/content/browser/renderer_host/render_widget_host_impl.cc |
+++ b/content/browser/renderer_host/render_widget_host_impl.cc |
@@ -82,6 +82,8 @@ |
#include "ui/snapshot/snapshot.h" |
#if defined(OS_MACOSX) |
+#include "content/browser/power_save_blocker_impl.h" |
+#include "content/public/browser/power_save_blocker_factory.h" |
#include "ui/accelerated_widget_mac/window_resize_helper_mac.h" |
#endif |
@@ -1272,6 +1274,20 @@ void RenderWidgetHostImpl::NotifyScreenInfoChanged() { |
void RenderWidgetHostImpl::GetSnapshotFromBrowser( |
const GetSnapshotFromBrowserCallback& callback) { |
int id = next_browser_snapshot_id_++; |
+ |
+#if defined(OS_MACOSX) |
+ // MacOS version of underlying GrabViewSnapshot() blocks while |
+ // display/GPU are in a power-saving mode, so make sure display |
+ // does not go to sleep for the duration of reading a snapshot. |
+ if (pending_browser_snapshots_.empty()) { |
+ DCHECK(!power_save_blocker_); |
+ power_save_blocker_.reset(static_cast<PowerSaveBlockerImpl*>( |
pfeldman
2016/06/07 04:35:29
Going impl for the sake of content/ policy seems a
|
+ CreatePowerSaveBlocker( |
+ PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep, |
+ PowerSaveBlocker::kReasonOther, "GetSnapshot") |
+ .release())); |
+ } |
+#endif |
pending_browser_snapshots_.insert(std::make_pair(id, callback)); |
Send(new ViewMsg_ForceRedraw(GetRoutingID(), id)); |
} |
@@ -2124,6 +2140,10 @@ void RenderWidgetHostImpl::OnSnapshotDataReceived(int snapshot_id, |
++it; |
} |
} |
+#if defined(OS_MACOSX) |
+ if (pending_browser_snapshots_.empty()) |
+ power_save_blocker_.reset(); |
+#endif |
} |
void RenderWidgetHostImpl::OnSnapshotDataReceivedAsync( |