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

Side by Side Diff: chrome/browser/media/webrtc/native_desktop_media_list.cc

Issue 2871323004: Use TaskScheduler instead of SequencedWorkerPool in native_desktop_media_list.cc. (Closed)
Patch Set: USER_VISIBLE 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/media/webrtc/native_desktop_media_list.h" 5 #include "chrome/browser/media/webrtc/native_desktop_media_list.h"
6 6
7 #include "base/hash.h" 7 #include "base/hash.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "base/threading/sequenced_worker_pool.h" 9 #include "base/task_scheduler/post_task.h"
10 #include "chrome/browser/media/webrtc/desktop_media_list_observer.h" 10 #include "chrome/browser/media/webrtc/desktop_media_list_observer.h"
11 #include "chrome/grit/generated_resources.h" 11 #include "chrome/grit/generated_resources.h"
12 #include "content/public/browser/browser_thread.h" 12 #include "content/public/browser/browser_thread.h"
13 #include "media/base/video_util.h" 13 #include "media/base/video_util.h"
14 #include "third_party/libyuv/include/libyuv/scale_argb.h" 14 #include "third_party/libyuv/include/libyuv/scale_argb.h"
15 #include "third_party/skia/include/core/SkBitmap.h" 15 #include "third_party/skia/include/core/SkBitmap.h"
16 #include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h" 16 #include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h"
17 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" 17 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
18 #include "ui/aura/window.h" 18 #include "ui/aura/window.h"
19 #include "ui/base/l10n/l10n_util.h" 19 #include "ui/base/l10n/l10n_util.h"
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 std::unique_ptr<webrtc::DesktopFrame> frame) { 230 std::unique_ptr<webrtc::DesktopFrame> frame) {
231 current_frame_ = std::move(frame); 231 current_frame_ = std::move(frame);
232 } 232 }
233 233
234 NativeDesktopMediaList::NativeDesktopMediaList( 234 NativeDesktopMediaList::NativeDesktopMediaList(
235 std::unique_ptr<webrtc::DesktopCapturer> screen_capturer, 235 std::unique_ptr<webrtc::DesktopCapturer> screen_capturer,
236 std::unique_ptr<webrtc::DesktopCapturer> window_capturer) 236 std::unique_ptr<webrtc::DesktopCapturer> window_capturer)
237 : DesktopMediaListBase( 237 : DesktopMediaListBase(
238 base::TimeDelta::FromMilliseconds(kDefaultUpdatePeriod)), 238 base::TimeDelta::FromMilliseconds(kDefaultUpdatePeriod)),
239 weak_factory_(this) { 239 weak_factory_(this) {
240 base::SequencedWorkerPool* worker_pool = BrowserThread::GetBlockingPool(); 240 capture_task_runner_ = base::CreateSequencedTaskRunnerWithTraits(
241 capture_task_runner_ = worker_pool->GetSequencedTaskRunner( 241 {base::MayBlock(), base::TaskPriority::USER_VISIBLE});
242 worker_pool->GetSequenceToken());
243 242
244 worker_.reset(new Worker(weak_factory_.GetWeakPtr(), 243 worker_.reset(new Worker(weak_factory_.GetWeakPtr(),
245 std::move(screen_capturer), 244 std::move(screen_capturer),
246 std::move(window_capturer))); 245 std::move(window_capturer)));
247 } 246 }
248 247
249 NativeDesktopMediaList::~NativeDesktopMediaList() { 248 NativeDesktopMediaList::~NativeDesktopMediaList() {
250 capture_task_runner_->DeleteSoon(FROM_HERE, worker_.release()); 249 capture_task_runner_->DeleteSoon(FROM_HERE, worker_.release());
251 } 250 }
252 251
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 gfx::NativeWindow window = DesktopMediaID::GetAuraWindowById(id); 337 gfx::NativeWindow window = DesktopMediaID::GetAuraWindowById(id);
339 if (!window) 338 if (!window)
340 return; 339 return;
341 340
342 gfx::Rect window_rect(window->bounds().width(), window->bounds().height()); 341 gfx::Rect window_rect(window->bounds().width(), window->bounds().height());
343 gfx::Rect scaled_rect = media::ComputeLetterboxRegion( 342 gfx::Rect scaled_rect = media::ComputeLetterboxRegion(
344 gfx::Rect(thumbnail_size_), window_rect.size()); 343 gfx::Rect(thumbnail_size_), window_rect.size());
345 344
346 pending_aura_capture_requests_++; 345 pending_aura_capture_requests_++;
347 ui::GrabWindowSnapshotAndScaleAsyncAura( 346 ui::GrabWindowSnapshotAndScaleAsyncAura(
348 window, window_rect, scaled_rect.size(), BrowserThread::GetBlockingPool(), 347 window, window_rect, scaled_rect.size(),
348 base::CreateTaskRunnerWithTraits(
349 {base::MayBlock(), base::TaskPriority::USER_VISIBLE}),
349 base::Bind(&NativeDesktopMediaList::OnAuraThumbnailCaptured, 350 base::Bind(&NativeDesktopMediaList::OnAuraThumbnailCaptured,
350 weak_factory_.GetWeakPtr(), id)); 351 weak_factory_.GetWeakPtr(), id));
351 } 352 }
352 353
353 void NativeDesktopMediaList::OnAuraThumbnailCaptured(const DesktopMediaID& id, 354 void NativeDesktopMediaList::OnAuraThumbnailCaptured(const DesktopMediaID& id,
354 const gfx::Image& image) { 355 const gfx::Image& image) {
355 if (!image.IsEmpty()) { 356 if (!image.IsEmpty()) {
356 // Only new or changed thumbnail need update. 357 // Only new or changed thumbnail need update.
357 new_aura_thumbnail_hashes_[id] = GetImageHash(image); 358 new_aura_thumbnail_hashes_[id] = GetImageHash(image);
358 if (!previous_aura_thumbnail_hashes_.count(id) || 359 if (!previous_aura_thumbnail_hashes_.count(id) ||
359 previous_aura_thumbnail_hashes_[id] != new_aura_thumbnail_hashes_[id]) { 360 previous_aura_thumbnail_hashes_[id] != new_aura_thumbnail_hashes_[id]) {
360 UpdateSourceThumbnail(id, image.AsImageSkia()); 361 UpdateSourceThumbnail(id, image.AsImageSkia());
361 } 362 }
362 } 363 }
363 364
364 // After all aura windows are processed, schedule next refresh; 365 // After all aura windows are processed, schedule next refresh;
365 pending_aura_capture_requests_--; 366 pending_aura_capture_requests_--;
366 DCHECK_GE(pending_aura_capture_requests_, 0); 367 DCHECK_GE(pending_aura_capture_requests_, 0);
367 if (pending_aura_capture_requests_ == 0) { 368 if (pending_aura_capture_requests_ == 0) {
368 previous_aura_thumbnail_hashes_ = std::move(new_aura_thumbnail_hashes_); 369 previous_aura_thumbnail_hashes_ = std::move(new_aura_thumbnail_hashes_);
369 // Schedule next refresh if aura thumbnail captures finished after native 370 // Schedule next refresh if aura thumbnail captures finished after native
370 // thumbnail captures. 371 // thumbnail captures.
371 if (!pending_native_thumbnail_capture_) 372 if (!pending_native_thumbnail_capture_)
372 ScheduleNextRefresh(); 373 ScheduleNextRefresh();
373 } 374 }
374 } 375 }
375 376
376 #endif // defined(USE_AURA) 377 #endif // defined(USE_AURA)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698