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

Unified Diff: content/browser/media/capture/desktop_capture_device.cc

Issue 2881143003: Convert //content/browser/media to be clients of WakeLock mojo service. (Closed)
Patch Set: code rebase Created 3 years, 7 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 | « content/browser/media/capture/aura_window_capture_machine.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/media/capture/desktop_capture_device.cc
diff --git a/content/browser/media/capture/desktop_capture_device.cc b/content/browser/media/capture/desktop_capture_device.cc
index 25cfdc6e27f85f4cd9dc462636538f202698bbfb..65b75f60c6b4e51774c5c654c2fe8e62cb901ea3 100644
--- a/content/browser/media/capture/desktop_capture_device.cc
+++ b/content/browser/media/capture/desktop_capture_device.cc
@@ -27,9 +27,13 @@
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/desktop_media_id.h"
#include "content/public/common/content_switches.h"
-#include "device/power_save_blocker/power_save_blocker.h"
+#include "content/public/common/service_manager_connection.h"
+#include "device/wake_lock/public/interfaces/wake_lock_provider.mojom.h"
+#include "device/wake_lock/public/interfaces/wake_lock_service.mojom.h"
#include "media/base/video_util.h"
#include "media/capture/content/capture_resolution_chooser.h"
+#include "services/device/public/interfaces/constants.mojom.h"
+#include "services/service_manager/public/cpp/connector.h"
#include "third_party/libyuv/include/libyuv/scale_argb.h"
#include "third_party/webrtc/modules/desktop_capture/cropping_window_capturer.h"
#include "third_party/webrtc/modules/desktop_capture/desktop_and_cursor_composer.h"
@@ -63,6 +67,16 @@ bool IsFrameUnpackedOrInverted(webrtc::DesktopFrame* frame) {
frame->size().width() * webrtc::DesktopFrame::kBytesPerPixel;
}
+std::unique_ptr<service_manager::Connector> GetServiceConnector() {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+ service_manager::Connector* connector =
+ ServiceManagerConnection::GetForProcess()->GetConnector();
+
+ DCHECK(connector);
+ return connector->Clone();
+}
+
} // namespace
#if defined(OS_WIN)
@@ -99,6 +113,8 @@ class DesktopCaptureDevice::Core : public webrtc::DesktopCapturer::Callback {
// Captures a single frame.
void DoCapture();
+ void RequestWakeLock(std::unique_ptr<service_manager::Connector> connector);
+
// Task runner used for capturing operations.
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
@@ -141,9 +157,11 @@ class DesktopCaptureDevice::Core : public webrtc::DesktopCapturer::Callback {
std::unique_ptr<webrtc::BasicDesktopFrame> black_frame_;
- // TODO(jiayl): Remove power_save_blocker_ when there is an API to keep the
+ // TODO(jiayl): Remove wake_lock_ when there is an API to keep the
// screen from sleeping for the drive-by web.
- std::unique_ptr<device::PowerSaveBlocker> power_save_blocker_;
+ device::mojom::WakeLockServicePtr wake_lock_;
+
+ base::WeakPtrFactory<Core> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(Core);
};
@@ -156,7 +174,8 @@ DesktopCaptureDevice::Core::Core(
desktop_capturer_(std::move(capturer)),
capture_in_progress_(false),
first_capture_returned_(false),
- capturer_type_(type) {}
+ capturer_type_(type),
+ weak_factory_(this) {}
DesktopCaptureDevice::Core::~Core() {
DCHECK(task_runner_->BelongsToCurrentThread());
@@ -182,11 +201,12 @@ void DesktopCaptureDevice::Core::AllocateAndStart(
params.requested_format.frame_size,
params.resolution_change_policy));
- power_save_blocker_.reset(new device::PowerSaveBlocker(
- device::PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep,
- device::PowerSaveBlocker::kReasonOther, "DesktopCaptureDevice is running",
- BrowserThread::GetTaskRunnerForThread(BrowserThread::UI),
- BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE)));
+ DCHECK(!wake_lock_);
+ // Gets a service_manager::Connector first, then request a wake lock.
+ BrowserThread::PostTaskAndReplyWithResult(
+ BrowserThread::UI, FROM_HERE, base::BindOnce(&GetServiceConnector),
+ base::BindOnce(&DesktopCaptureDevice::Core::RequestWakeLock,
+ weak_factory_.GetWeakPtr()));
desktop_capturer_->Start(this);
// Assume it will be always started successfully for now.
@@ -365,6 +385,19 @@ void DesktopCaptureDevice::Core::DoCapture() {
DCHECK(!capture_in_progress_);
}
+void DesktopCaptureDevice::Core::RequestWakeLock(
+ std::unique_ptr<service_manager::Connector> connector) {
+ device::mojom::WakeLockProviderPtr wake_lock_provider;
+ connector->BindInterface(device::mojom::kServiceName,
+ mojo::MakeRequest(&wake_lock_provider));
+ wake_lock_provider->GetWakeLockWithoutContext(
+ device::mojom::WakeLockType::PreventDisplaySleep,
+ device::mojom::WakeLockReason::ReasonOther, "Desktop capture is running",
+ mojo::MakeRequest(&wake_lock_));
+
+ wake_lock_->RequestWakeLock();
+}
+
// static
std::unique_ptr<media::VideoCaptureDevice> DesktopCaptureDevice::Create(
const DesktopMediaID& source) {
@@ -450,10 +483,8 @@ void DesktopCaptureDevice::SetNotificationWindowId(
if (!core_)
return;
thread_.task_runner()->PostTask(
- FROM_HERE,
- base::Bind(&Core::SetNotificationWindowId,
- base::Unretained(core_.get()),
- window_id));
+ FROM_HERE, base::Bind(&Core::SetNotificationWindowId,
+ base::Unretained(core_.get()), window_id));
}
DesktopCaptureDevice::DesktopCaptureDevice(
« no previous file with comments | « content/browser/media/capture/aura_window_capture_machine.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698