| Index: content/renderer/gpu/compositor_output_surface.cc
|
| diff --git a/content/renderer/gpu/compositor_output_surface.cc b/content/renderer/gpu/compositor_output_surface.cc
|
| index c8270a68c73dcfd298b713f9f7d382ab86b4affb..014648e08aab42b12b26f9416d7aaf047e1353b0 100644
|
| --- a/content/renderer/gpu/compositor_output_surface.cc
|
| +++ b/content/renderer/gpu/compositor_output_surface.cc
|
| @@ -23,12 +23,6 @@
|
| #include "gpu/command_buffer/client/gles2_interface.h"
|
| #include "ipc/ipc_sync_channel.h"
|
|
|
| -namespace {
|
| -// There are several compositor surfaces in a process, but they share the same
|
| -// compositor thread, so we use a simple int here to track prefer-smoothness.
|
| -int g_prefer_smoothness_count = 0;
|
| -} // namespace
|
| -
|
| namespace content {
|
|
|
| CompositorOutputSurface::CompositorOutputSurface(
|
| @@ -48,12 +42,9 @@ CompositorOutputSurface::CompositorOutputSurface(
|
| RenderThreadImpl::current()->compositor_message_filter()),
|
| frame_swap_message_queue_(swap_frame_message_queue),
|
| routing_id_(routing_id),
|
| +#if defined(OS_ANDROID)
|
| prefers_smoothness_(false),
|
| -#if defined(OS_WIN)
|
| - // TODO(epenner): Implement PlatformThread::CurrentHandle() on windows.
|
| - main_thread_handle_(base::PlatformThreadHandle()),
|
| -#else
|
| - main_thread_handle_(base::PlatformThread::CurrentHandle()),
|
| + main_thread_runner_(base::MessageLoop::current()->task_runner()),
|
| #endif
|
| layout_test_mode_(RenderThreadImpl::current()->layout_test_mode()),
|
| weak_ptrs_(this) {
|
| @@ -213,45 +204,31 @@ bool CompositorOutputSurface::Send(IPC::Message* message) {
|
| return message_sender_->Send(message);
|
| }
|
|
|
| -namespace {
|
| #if defined(OS_ANDROID)
|
| - void SetThreadPriorityToIdle(base::PlatformThreadHandle handle) {
|
| - base::PlatformThread::SetThreadPriority(handle,
|
| - base::ThreadPriority::BACKGROUND);
|
| - }
|
| - void SetThreadPriorityToDefault(base::PlatformThreadHandle handle) {
|
| - base::PlatformThread::SetThreadPriority(handle,
|
| - base::ThreadPriority::NORMAL);
|
| - }
|
| -#else
|
| - void SetThreadPriorityToIdle(base::PlatformThreadHandle handle) {}
|
| - void SetThreadPriorityToDefault(base::PlatformThreadHandle handle) {}
|
| -#endif
|
| +namespace {
|
| +void SetThreadPriorityToIdle() {
|
| + base::PlatformThread::SetCurrentThreadPriority(
|
| + base::ThreadPriority::BACKGROUND);
|
| }
|
| +void SetThreadPriorityToDefault() {
|
| + base::PlatformThread::SetCurrentThreadPriority(
|
| + base::ThreadPriority::NORMAL);
|
| +}
|
| +} // namespace
|
|
|
| void CompositorOutputSurface::UpdateSmoothnessTakesPriority(
|
| bool prefers_smoothness) {
|
| -#ifndef NDEBUG
|
| - // If we use different compositor threads, we need to
|
| - // use an atomic int to track prefer smoothness count.
|
| - base::PlatformThreadId g_last_thread = base::PlatformThread::CurrentId();
|
| - DCHECK_EQ(g_last_thread, base::PlatformThread::CurrentId());
|
| -#endif
|
| if (prefers_smoothness_ == prefers_smoothness)
|
| return;
|
| - // If this is the first surface to start preferring smoothness,
|
| - // Throttle the main thread's priority.
|
| - if (prefers_smoothness_ == false &&
|
| - ++g_prefer_smoothness_count == 1) {
|
| - SetThreadPriorityToIdle(main_thread_handle_);
|
| - }
|
| - // If this is the last surface to stop preferring smoothness,
|
| - // Reset the main thread's priority to the default.
|
| - if (prefers_smoothness_ == true &&
|
| - --g_prefer_smoothness_count == 0) {
|
| - SetThreadPriorityToDefault(main_thread_handle_);
|
| - }
|
| prefers_smoothness_ = prefers_smoothness;
|
| + if (prefers_smoothness) {
|
| + main_thread_runner_->PostTask(
|
| + FROM_HERE, base::Bind(&SetThreadPriorityToIdle));
|
| + } else {
|
| + main_thread_runner_->PostTask(
|
| + FROM_HERE, base::Bind(&SetThreadPriorityToDefault));
|
| + }
|
| }
|
| +#endif
|
|
|
| } // namespace content
|
|
|