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

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: clone() should happen in UI threads. 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
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 f4236b5a2739897ab5eb7bb37768221869742b3d..628366a37c03ee3ff8701d1dff057be470875d38 100644
--- a/content/browser/media/capture/desktop_capture_device.cc
+++ b/content/browser/media/capture/desktop_capture_device.cc
@@ -26,9 +26,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"
@@ -62,6 +66,16 @@ bool IsFrameUnpackedOrInverted(webrtc::DesktopFrame* frame) {
frame->size().width() * webrtc::DesktopFrame::kBytesPerPixel;
}
+std::unique_ptr<service_manager::Connector> GetConnector() {
Do not use (sergeyu) 2017/05/16 19:29:43 Maybe call it GetServiceConnector()?
ke.he 2017/05/17 10:25:52 Done.
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+ service_manager::Connector* connector =
+ ServiceManagerConnection::GetForProcess()->GetConnector();
+
+ DCHECK(connector);
+ return connector->Clone();
+}
+
} // namespace
#if defined(OS_WIN)
@@ -98,6 +112,10 @@ class DesktopCaptureDevice::Core : public webrtc::DesktopCapturer::Callback {
// Captures a single frame.
void DoCapture();
+ // Requests a wake lock.
Do not use (sergeyu) 2017/05/16 19:29:43 I don't think this comment is useful - it just dup
ke.he 2017/05/17 10:25:52 Done.
+ void RequestWakeLock(
+ const std::unique_ptr<service_manager::Connector>& connector);
Do not use (sergeyu) 2017/05/16 19:29:43 I don't think it needs to be const reference. Norm
ke.he 2017/05/17 10:25:52 Done.
+
// Task runner used for capturing operations.
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
@@ -140,9 +158,7 @@ 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
Sergey Ulanov 2017/05/17 18:47:55 Please keep this TODO, it's still relevant
ke.he 2017/05/18 05:32:58 Done. and also in "aura_window_capture_machine.h"
- // screen from sleeping for the drive-by web.
- std::unique_ptr<device::PowerSaveBlocker> power_save_blocker_;
+ device::mojom::WakeLockServicePtr wake_lock_;
DISALLOW_COPY_AND_ASSIGN(Core);
};
@@ -181,11 +197,11 @@ 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)));
+ // Gets a service_manager::connector first, then request a wake lock.
Do not use (sergeyu) 2017/05/16 19:29:43 s/connector/Connector/
ke.he 2017/05/17 10:25:52 Done.
+ BrowserThread::PostTaskAndReplyWithResult(
+ BrowserThread::UI, FROM_HERE, base::BindOnce(&GetConnector),
+ base::BindOnce(&DesktopCaptureDevice::Core::RequestWakeLock,
+ base::Unretained(this)));
Do not use (sergeyu) 2017/05/16 19:29:43 I don't think base::Unretained() is safe here. Add
ke.he 2017/05/17 10:25:52 Oh! Yes, should use WeakPtr here. thanks! Done.
desktop_capturer_->Start(this);
// Assume it will be always started successfully for now.
@@ -364,6 +380,19 @@ void DesktopCaptureDevice::Core::DoCapture() {
DCHECK(!capture_in_progress_);
}
+void DesktopCaptureDevice::Core::RequestWakeLock(
+ const 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,
+ "DesktopCaptureDevice is running", mojo::MakeRequest(&wake_lock_));
Do not use (sergeyu) 2017/05/16 19:29:43 Please change the description to "Desktop capturer
ke.he 2017/05/17 10:25:52 "is active" or "is running"? Done with "is running
Sergey Ulanov 2017/05/17 18:47:55 I'm fine with either.
+
+ wake_lock_->RequestWakeLock();
+}
+
// static
std::unique_ptr<media::VideoCaptureDevice> DesktopCaptureDevice::Create(
const DesktopMediaID& source) {
@@ -449,10 +478,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(

Powered by Google App Engine
This is Rietveld 408576698