Chromium Code Reviews| 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( |