OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/common/gpu/gpu_channel.h" | 5 #include "gpu/ipc/service/gpu_channel.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #if defined(OS_WIN) | 9 #if defined(OS_WIN) |
10 #include <windows.h> | 10 #include <windows.h> |
11 #endif | 11 #endif |
12 | 12 |
13 #include <algorithm> | 13 #include <algorithm> |
14 #include <deque> | 14 #include <deque> |
15 #include <set> | 15 #include <set> |
16 #include <vector> | 16 #include <vector> |
17 | 17 |
18 #include "base/atomicops.h" | 18 #include "base/atomicops.h" |
19 #include "base/bind.h" | 19 #include "base/bind.h" |
20 #include "base/command_line.h" | 20 #include "base/command_line.h" |
21 #include "base/location.h" | 21 #include "base/location.h" |
22 #include "base/numerics/safe_conversions.h" | 22 #include "base/numerics/safe_conversions.h" |
23 #include "base/single_thread_task_runner.h" | 23 #include "base/single_thread_task_runner.h" |
24 #include "base/stl_util.h" | 24 #include "base/stl_util.h" |
25 #include "base/strings/string_util.h" | 25 #include "base/strings/string_util.h" |
26 #include "base/synchronization/lock.h" | 26 #include "base/synchronization/lock.h" |
27 #include "base/thread_task_runner_handle.h" | 27 #include "base/thread_task_runner_handle.h" |
28 #include "base/timer/timer.h" | 28 #include "base/timer/timer.h" |
29 #include "base/trace_event/memory_dump_manager.h" | 29 #include "base/trace_event/memory_dump_manager.h" |
30 #include "base/trace_event/process_memory_dump.h" | 30 #include "base/trace_event/process_memory_dump.h" |
31 #include "base/trace_event/trace_event.h" | 31 #include "base/trace_event/trace_event.h" |
32 #include "build/build_config.h" | 32 #include "build/build_config.h" |
33 #include "content/common/gpu/gpu_channel_manager.h" | |
34 #include "content/common/gpu/gpu_channel_manager_delegate.h" | |
35 #include "content/common/gpu/gpu_memory_buffer_factory.h" | |
36 #include "gpu/command_buffer/common/mailbox.h" | 33 #include "gpu/command_buffer/common/mailbox.h" |
37 #include "gpu/command_buffer/common/value_state.h" | 34 #include "gpu/command_buffer/common/value_state.h" |
38 #include "gpu/command_buffer/service/command_executor.h" | 35 #include "gpu/command_buffer/service/command_executor.h" |
39 #include "gpu/command_buffer/service/image_factory.h" | 36 #include "gpu/command_buffer/service/image_factory.h" |
40 #include "gpu/command_buffer/service/mailbox_manager.h" | 37 #include "gpu/command_buffer/service/mailbox_manager.h" |
41 #include "gpu/command_buffer/service/sync_point_manager.h" | 38 #include "gpu/command_buffer/service/sync_point_manager.h" |
42 #include "gpu/command_buffer/service/valuebuffer_manager.h" | 39 #include "gpu/command_buffer/service/valuebuffer_manager.h" |
43 #include "gpu/ipc/common/gpu_messages.h" | 40 #include "gpu/ipc/common/gpu_messages.h" |
| 41 #include "gpu/ipc/service/gpu_channel_manager.h" |
| 42 #include "gpu/ipc/service/gpu_channel_manager_delegate.h" |
| 43 #include "gpu/ipc/service/gpu_memory_buffer_factory.h" |
44 #include "ipc/ipc_channel.h" | 44 #include "ipc/ipc_channel.h" |
45 #include "ipc/message_filter.h" | 45 #include "ipc/message_filter.h" |
46 #include "ui/gl/gl_context.h" | 46 #include "ui/gl/gl_context.h" |
47 #include "ui/gl/gl_image_shared_memory.h" | 47 #include "ui/gl/gl_image_shared_memory.h" |
48 #include "ui/gl/gl_surface.h" | 48 #include "ui/gl/gl_surface.h" |
49 | 49 |
50 #if defined(OS_POSIX) | 50 #if defined(OS_POSIX) |
51 #include "ipc/ipc_channel_posix.h" | 51 #include "ipc/ipc_channel_posix.h" |
52 #endif | 52 #endif |
53 | 53 |
54 namespace content { | 54 namespace gpu { |
55 namespace { | 55 namespace { |
56 | 56 |
57 // Number of milliseconds between successive vsync. Many GL commands block | 57 // Number of milliseconds between successive vsync. Many GL commands block |
58 // on vsync, so thresholds for preemption should be multiples of this. | 58 // on vsync, so thresholds for preemption should be multiples of this. |
59 const int64_t kVsyncIntervalMs = 17; | 59 const int64_t kVsyncIntervalMs = 17; |
60 | 60 |
61 // Amount of time that we will wait for an IPC to be processed before | 61 // Amount of time that we will wait for an IPC to be processed before |
62 // preempting. After a preemption, we must wait this long before triggering | 62 // preempting. After a preemption, we must wait this long before triggering |
63 // another preemption. | 63 // another preemption. |
64 const int64_t kPreemptWaitTimeMs = 2 * kVsyncIntervalMs; | 64 const int64_t kPreemptWaitTimeMs = 2 * kVsyncIntervalMs; |
65 | 65 |
66 // Once we trigger a preemption, the maximum duration that we will wait | 66 // Once we trigger a preemption, the maximum duration that we will wait |
67 // before clearing the preemption. | 67 // before clearing the preemption. |
68 const int64_t kMaxPreemptTimeMs = kVsyncIntervalMs; | 68 const int64_t kMaxPreemptTimeMs = kVsyncIntervalMs; |
69 | 69 |
70 // Stop the preemption once the time for the longest pending IPC drops | 70 // Stop the preemption once the time for the longest pending IPC drops |
71 // below this threshold. | 71 // below this threshold. |
72 const int64_t kStopPreemptThresholdMs = kVsyncIntervalMs; | 72 const int64_t kStopPreemptThresholdMs = kVsyncIntervalMs; |
73 | 73 |
74 } // anonymous namespace | 74 } // anonymous namespace |
75 | 75 |
76 scoped_refptr<GpuChannelMessageQueue> GpuChannelMessageQueue::Create( | 76 scoped_refptr<GpuChannelMessageQueue> GpuChannelMessageQueue::Create( |
77 int32_t stream_id, | 77 int32_t stream_id, |
78 gpu::GpuStreamPriority stream_priority, | 78 GpuStreamPriority stream_priority, |
79 GpuChannel* channel, | 79 GpuChannel* channel, |
80 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner, | 80 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner, |
81 const scoped_refptr<gpu::PreemptionFlag>& preempting_flag, | 81 const scoped_refptr<PreemptionFlag>& preempting_flag, |
82 const scoped_refptr<gpu::PreemptionFlag>& preempted_flag, | 82 const scoped_refptr<PreemptionFlag>& preempted_flag, |
83 gpu::SyncPointManager* sync_point_manager) { | 83 SyncPointManager* sync_point_manager) { |
84 return new GpuChannelMessageQueue(stream_id, stream_priority, channel, | 84 return new GpuChannelMessageQueue(stream_id, stream_priority, channel, |
85 io_task_runner, preempting_flag, | 85 io_task_runner, preempting_flag, |
86 preempted_flag, sync_point_manager); | 86 preempted_flag, sync_point_manager); |
87 } | 87 } |
88 | 88 |
89 scoped_refptr<gpu::SyncPointOrderData> | 89 scoped_refptr<SyncPointOrderData> |
90 GpuChannelMessageQueue::GetSyncPointOrderData() { | 90 GpuChannelMessageQueue::GetSyncPointOrderData() { |
91 return sync_point_order_data_; | 91 return sync_point_order_data_; |
92 } | 92 } |
93 | 93 |
94 GpuChannelMessageQueue::GpuChannelMessageQueue( | 94 GpuChannelMessageQueue::GpuChannelMessageQueue( |
95 int32_t stream_id, | 95 int32_t stream_id, |
96 gpu::GpuStreamPriority stream_priority, | 96 GpuStreamPriority stream_priority, |
97 GpuChannel* channel, | 97 GpuChannel* channel, |
98 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner, | 98 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner, |
99 const scoped_refptr<gpu::PreemptionFlag>& preempting_flag, | 99 const scoped_refptr<PreemptionFlag>& preempting_flag, |
100 const scoped_refptr<gpu::PreemptionFlag>& preempted_flag, | 100 const scoped_refptr<PreemptionFlag>& preempted_flag, |
101 gpu::SyncPointManager* sync_point_manager) | 101 SyncPointManager* sync_point_manager) |
102 : stream_id_(stream_id), | 102 : stream_id_(stream_id), |
103 stream_priority_(stream_priority), | 103 stream_priority_(stream_priority), |
104 enabled_(true), | 104 enabled_(true), |
105 scheduled_(true), | 105 scheduled_(true), |
106 channel_(channel), | 106 channel_(channel), |
107 preemption_state_(IDLE), | 107 preemption_state_(IDLE), |
108 max_preemption_time_( | 108 max_preemption_time_( |
109 base::TimeDelta::FromMilliseconds(kMaxPreemptTimeMs)), | 109 base::TimeDelta::FromMilliseconds(kMaxPreemptTimeMs)), |
110 timer_(new base::OneShotTimer), | 110 timer_(new base::OneShotTimer), |
111 sync_point_order_data_(gpu::SyncPointOrderData::Create()), | 111 sync_point_order_data_(SyncPointOrderData::Create()), |
112 io_task_runner_(io_task_runner), | 112 io_task_runner_(io_task_runner), |
113 preempting_flag_(preempting_flag), | 113 preempting_flag_(preempting_flag), |
114 preempted_flag_(preempted_flag), | 114 preempted_flag_(preempted_flag), |
115 sync_point_manager_(sync_point_manager) { | 115 sync_point_manager_(sync_point_manager) { |
116 timer_->SetTaskRunner(io_task_runner); | 116 timer_->SetTaskRunner(io_task_runner); |
117 io_thread_checker_.DetachFromThread(); | 117 io_thread_checker_.DetachFromThread(); |
118 } | 118 } |
119 | 119 |
120 GpuChannelMessageQueue::~GpuChannelMessageQueue() { | 120 GpuChannelMessageQueue::~GpuChannelMessageQueue() { |
121 DCHECK(!enabled_); | 121 DCHECK(!enabled_); |
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
571 DLOG(ERROR) << error_msg; | 571 DLOG(ERROR) << error_msg; |
572 if (message.is_sync()) { | 572 if (message.is_sync()) { |
573 IPC::Message* reply = IPC::SyncMessage::GenerateReply(&message); | 573 IPC::Message* reply = IPC::SyncMessage::GenerateReply(&message); |
574 reply->set_reply_error(); | 574 reply->set_reply_error(); |
575 Send(reply); | 575 Send(reply); |
576 } | 576 } |
577 return true; | 577 return true; |
578 } | 578 } |
579 | 579 |
580 GpuChannel::GpuChannel(GpuChannelManager* gpu_channel_manager, | 580 GpuChannel::GpuChannel(GpuChannelManager* gpu_channel_manager, |
581 gpu::SyncPointManager* sync_point_manager, | 581 SyncPointManager* sync_point_manager, |
582 GpuWatchdog* watchdog, | 582 GpuWatchdog* watchdog, |
583 gfx::GLShareGroup* share_group, | 583 gfx::GLShareGroup* share_group, |
584 gpu::gles2::MailboxManager* mailbox, | 584 gles2::MailboxManager* mailbox, |
585 gpu::PreemptionFlag* preempting_flag, | 585 PreemptionFlag* preempting_flag, |
586 gpu::PreemptionFlag* preempted_flag, | 586 PreemptionFlag* preempted_flag, |
587 base::SingleThreadTaskRunner* task_runner, | 587 base::SingleThreadTaskRunner* task_runner, |
588 base::SingleThreadTaskRunner* io_task_runner, | 588 base::SingleThreadTaskRunner* io_task_runner, |
589 int32_t client_id, | 589 int32_t client_id, |
590 uint64_t client_tracing_id, | 590 uint64_t client_tracing_id, |
591 bool allow_view_command_buffers, | 591 bool allow_view_command_buffers, |
592 bool allow_real_time_streams) | 592 bool allow_real_time_streams) |
593 : gpu_channel_manager_(gpu_channel_manager), | 593 : gpu_channel_manager_(gpu_channel_manager), |
594 sync_point_manager_(sync_point_manager), | 594 sync_point_manager_(sync_point_manager), |
595 unhandled_message_listener_(nullptr), | 595 unhandled_message_listener_(nullptr), |
596 channel_id_(IPC::Channel::GenerateVerifiedChannelID("gpu")), | 596 channel_id_(IPC::Channel::GenerateVerifiedChannelID("gpu")), |
597 preempting_flag_(preempting_flag), | 597 preempting_flag_(preempting_flag), |
598 preempted_flag_(preempted_flag), | 598 preempted_flag_(preempted_flag), |
599 client_id_(client_id), | 599 client_id_(client_id), |
600 client_tracing_id_(client_tracing_id), | 600 client_tracing_id_(client_tracing_id), |
601 task_runner_(task_runner), | 601 task_runner_(task_runner), |
602 io_task_runner_(io_task_runner), | 602 io_task_runner_(io_task_runner), |
603 share_group_(share_group), | 603 share_group_(share_group), |
604 mailbox_manager_(mailbox), | 604 mailbox_manager_(mailbox), |
605 subscription_ref_set_(new gpu::gles2::SubscriptionRefSet), | 605 subscription_ref_set_(new gles2::SubscriptionRefSet), |
606 pending_valuebuffer_state_(new gpu::ValueStateMap), | 606 pending_valuebuffer_state_(new ValueStateMap), |
607 watchdog_(watchdog), | 607 watchdog_(watchdog), |
608 allow_view_command_buffers_(allow_view_command_buffers), | 608 allow_view_command_buffers_(allow_view_command_buffers), |
609 allow_real_time_streams_(allow_real_time_streams), | 609 allow_real_time_streams_(allow_real_time_streams), |
610 weak_factory_(this) { | 610 weak_factory_(this) { |
611 DCHECK(gpu_channel_manager); | 611 DCHECK(gpu_channel_manager); |
612 DCHECK(client_id); | 612 DCHECK(client_id); |
613 | 613 |
614 filter_ = new GpuChannelMessageFilter(); | 614 filter_ = new GpuChannelMessageFilter(); |
615 | 615 |
616 scoped_refptr<GpuChannelMessageQueue> control_queue = | 616 scoped_refptr<GpuChannelMessageQueue> control_queue = |
617 CreateStream(gpu::GPU_STREAM_DEFAULT, gpu::GpuStreamPriority::HIGH); | 617 CreateStream(GPU_STREAM_DEFAULT, GpuStreamPriority::HIGH); |
618 AddRouteToStream(MSG_ROUTING_CONTROL, gpu::GPU_STREAM_DEFAULT); | 618 AddRouteToStream(MSG_ROUTING_CONTROL, GPU_STREAM_DEFAULT); |
619 | 619 |
620 subscription_ref_set_->AddObserver(this); | 620 subscription_ref_set_->AddObserver(this); |
621 } | 621 } |
622 | 622 |
623 GpuChannel::~GpuChannel() { | 623 GpuChannel::~GpuChannel() { |
624 // Clear stubs first because of dependencies. | 624 // Clear stubs first because of dependencies. |
625 stubs_.clear(); | 625 stubs_.clear(); |
626 | 626 |
627 for (auto& kv : streams_) | 627 for (auto& kv : streams_) |
628 kv.second->Disable(); | 628 kv.second->Disable(); |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
760 OnCreateCommandBuffer) | 760 OnCreateCommandBuffer) |
761 IPC_MESSAGE_HANDLER(GpuChannelMsg_DestroyCommandBuffer, | 761 IPC_MESSAGE_HANDLER(GpuChannelMsg_DestroyCommandBuffer, |
762 OnDestroyCommandBuffer) | 762 OnDestroyCommandBuffer) |
763 IPC_MESSAGE_HANDLER(GpuChannelMsg_GetDriverBugWorkArounds, | 763 IPC_MESSAGE_HANDLER(GpuChannelMsg_GetDriverBugWorkArounds, |
764 OnGetDriverBugWorkArounds) | 764 OnGetDriverBugWorkArounds) |
765 IPC_MESSAGE_UNHANDLED(handled = false) | 765 IPC_MESSAGE_UNHANDLED(handled = false) |
766 IPC_END_MESSAGE_MAP() | 766 IPC_END_MESSAGE_MAP() |
767 return handled; | 767 return handled; |
768 } | 768 } |
769 | 769 |
770 scoped_refptr<gpu::SyncPointOrderData> GpuChannel::GetSyncPointOrderData( | 770 scoped_refptr<SyncPointOrderData> GpuChannel::GetSyncPointOrderData( |
771 int32_t stream_id) { | 771 int32_t stream_id) { |
772 auto it = streams_.find(stream_id); | 772 auto it = streams_.find(stream_id); |
773 DCHECK(it != streams_.end()); | 773 DCHECK(it != streams_.end()); |
774 DCHECK(it->second); | 774 DCHECK(it->second); |
775 return it->second->GetSyncPointOrderData(); | 775 return it->second->GetSyncPointOrderData(); |
776 } | 776 } |
777 | 777 |
778 void GpuChannel::PostHandleMessage( | 778 void GpuChannel::PostHandleMessage( |
779 const scoped_refptr<GpuChannelMessageQueue>& queue) { | 779 const scoped_refptr<GpuChannelMessageQueue>& queue) { |
780 task_runner_->PostTask(FROM_HERE, | 780 task_runner_->PostTask(FROM_HERE, |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
839 void GpuChannel::HandleOutOfOrderMessage(const IPC::Message& msg) { | 839 void GpuChannel::HandleOutOfOrderMessage(const IPC::Message& msg) { |
840 HandleMessageHelper(msg); | 840 HandleMessageHelper(msg); |
841 } | 841 } |
842 | 842 |
843 void GpuChannel::HandleMessageForTesting(const IPC::Message& msg) { | 843 void GpuChannel::HandleMessageForTesting(const IPC::Message& msg) { |
844 HandleMessageHelper(msg); | 844 HandleMessageHelper(msg); |
845 } | 845 } |
846 | 846 |
847 scoped_refptr<GpuChannelMessageQueue> GpuChannel::CreateStream( | 847 scoped_refptr<GpuChannelMessageQueue> GpuChannel::CreateStream( |
848 int32_t stream_id, | 848 int32_t stream_id, |
849 gpu::GpuStreamPriority stream_priority) { | 849 GpuStreamPriority stream_priority) { |
850 DCHECK(streams_.find(stream_id) == streams_.end()); | 850 DCHECK(streams_.find(stream_id) == streams_.end()); |
851 scoped_refptr<GpuChannelMessageQueue> queue = GpuChannelMessageQueue::Create( | 851 scoped_refptr<GpuChannelMessageQueue> queue = GpuChannelMessageQueue::Create( |
852 stream_id, stream_priority, this, io_task_runner_, | 852 stream_id, stream_priority, this, io_task_runner_, |
853 (stream_id == gpu::GPU_STREAM_DEFAULT) ? preempting_flag_ : nullptr, | 853 (stream_id == GPU_STREAM_DEFAULT) ? preempting_flag_ : nullptr, |
854 preempted_flag_, sync_point_manager_); | 854 preempted_flag_, sync_point_manager_); |
855 streams_.insert(std::make_pair(stream_id, queue)); | 855 streams_.insert(std::make_pair(stream_id, queue)); |
856 streams_to_num_routes_.insert(std::make_pair(stream_id, 0)); | 856 streams_to_num_routes_.insert(std::make_pair(stream_id, 0)); |
857 return queue; | 857 return queue; |
858 } | 858 } |
859 | 859 |
860 scoped_refptr<GpuChannelMessageQueue> GpuChannel::LookupStream( | 860 scoped_refptr<GpuChannelMessageQueue> GpuChannel::LookupStream( |
861 int32_t stream_id) { | 861 int32_t stream_id) { |
862 auto stream_it = streams_.find(stream_id); | 862 auto stream_it = streams_.find(stream_id); |
863 if (stream_it != streams_.end()) | 863 if (stream_it != streams_.end()) |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
898 for (const auto& kv : stubs_) { | 898 for (const auto& kv : stubs_) { |
899 const GpuCommandBufferStub* stub = kv.second; | 899 const GpuCommandBufferStub* stub = kv.second; |
900 if (stub->decoder() && !stub->decoder()->WasContextLost()) | 900 if (stub->decoder() && !stub->decoder()->WasContextLost()) |
901 return stub; | 901 return stub; |
902 } | 902 } |
903 return nullptr; | 903 return nullptr; |
904 } | 904 } |
905 #endif | 905 #endif |
906 | 906 |
907 void GpuChannel::OnCreateCommandBuffer( | 907 void GpuChannel::OnCreateCommandBuffer( |
908 gpu::SurfaceHandle surface_handle, | 908 SurfaceHandle surface_handle, |
909 const gfx::Size& size, | 909 const gfx::Size& size, |
910 const GPUCreateCommandBufferConfig& init_params, | 910 const GPUCreateCommandBufferConfig& init_params, |
911 int32_t route_id, | 911 int32_t route_id, |
912 bool* succeeded) { | 912 bool* succeeded) { |
913 TRACE_EVENT2("gpu", "GpuChannel::OnCreateCommandBuffer", "route_id", route_id, | 913 TRACE_EVENT2("gpu", "GpuChannel::OnCreateCommandBuffer", "route_id", route_id, |
914 "offscreen", (surface_handle == gpu::kNullSurfaceHandle)); | 914 "offscreen", (surface_handle == kNullSurfaceHandle)); |
915 *succeeded = false; | 915 *succeeded = false; |
916 if (surface_handle != gpu::kNullSurfaceHandle && | 916 if (surface_handle != kNullSurfaceHandle && |
917 !allow_view_command_buffers_) { | 917 !allow_view_command_buffers_) { |
918 DLOG(ERROR) << "GpuChannel::CreateCommandBuffer(): attempt to create a " | 918 DLOG(ERROR) << "GpuChannel::CreateCommandBuffer(): attempt to create a " |
919 "view context on a non-priviledged channel"; | 919 "view context on a non-priviledged channel"; |
920 return; | 920 return; |
921 } | 921 } |
922 | 922 |
923 int32_t share_group_id = init_params.share_group_id; | 923 int32_t share_group_id = init_params.share_group_id; |
924 GpuCommandBufferStub* share_group = stubs_.get(share_group_id); | 924 GpuCommandBufferStub* share_group = stubs_.get(share_group_id); |
925 | 925 |
926 if (!share_group && share_group_id != MSG_ROUTING_NONE) { | 926 if (!share_group && share_group_id != MSG_ROUTING_NONE) { |
927 DLOG(ERROR) | 927 DLOG(ERROR) |
928 << "GpuChannel::OnCreateCommandBuffer(): invalid share group id"; | 928 << "GpuChannel::OnCreateCommandBuffer(): invalid share group id"; |
929 return; | 929 return; |
930 } | 930 } |
931 | 931 |
932 int32_t stream_id = init_params.stream_id; | 932 int32_t stream_id = init_params.stream_id; |
933 if (share_group && stream_id != share_group->stream_id()) { | 933 if (share_group && stream_id != share_group->stream_id()) { |
934 DLOG(ERROR) << "GpuChannel::OnCreateCommandBuffer(): stream id does not " | 934 DLOG(ERROR) << "GpuChannel::OnCreateCommandBuffer(): stream id does not " |
935 "match share group stream id"; | 935 "match share group stream id"; |
936 return; | 936 return; |
937 } | 937 } |
938 | 938 |
939 gpu::GpuStreamPriority stream_priority = init_params.stream_priority; | 939 GpuStreamPriority stream_priority = init_params.stream_priority; |
940 if (!allow_real_time_streams_ && | 940 if (!allow_real_time_streams_ && |
941 stream_priority == gpu::GpuStreamPriority::REAL_TIME) { | 941 stream_priority == GpuStreamPriority::REAL_TIME) { |
942 DLOG(ERROR) << "GpuChannel::OnCreateCommandBuffer(): real time stream " | 942 DLOG(ERROR) << "GpuChannel::OnCreateCommandBuffer(): real time stream " |
943 "priority not allowed"; | 943 "priority not allowed"; |
944 return; | 944 return; |
945 } | 945 } |
946 | 946 |
947 scoped_ptr<GpuCommandBufferStub> stub(new GpuCommandBufferStub( | 947 scoped_ptr<GpuCommandBufferStub> stub(new GpuCommandBufferStub( |
948 this, sync_point_manager_, task_runner_.get(), share_group, | 948 this, sync_point_manager_, task_runner_.get(), share_group, |
949 surface_handle, mailbox_manager_.get(), preempted_flag_.get(), | 949 surface_handle, mailbox_manager_.get(), preempted_flag_.get(), |
950 subscription_ref_set_.get(), pending_valuebuffer_state_.get(), size, | 950 subscription_ref_set_.get(), pending_valuebuffer_state_.get(), size, |
951 disallowed_features_, init_params.attribs, init_params.gpu_preference, | 951 disallowed_features_, init_params.attribs, init_params.gpu_preference, |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1009 } | 1009 } |
1010 | 1010 |
1011 void GpuChannel::RemoveFilter(IPC::MessageFilter* filter) { | 1011 void GpuChannel::RemoveFilter(IPC::MessageFilter* filter) { |
1012 io_task_runner_->PostTask( | 1012 io_task_runner_->PostTask( |
1013 FROM_HERE, base::Bind(&GpuChannelMessageFilter::RemoveChannelFilter, | 1013 FROM_HERE, base::Bind(&GpuChannelMessageFilter::RemoveChannelFilter, |
1014 filter_, make_scoped_refptr(filter))); | 1014 filter_, make_scoped_refptr(filter))); |
1015 } | 1015 } |
1016 | 1016 |
1017 uint64_t GpuChannel::GetMemoryUsage() { | 1017 uint64_t GpuChannel::GetMemoryUsage() { |
1018 // Collect the unique memory trackers in use by the |stubs_|. | 1018 // Collect the unique memory trackers in use by the |stubs_|. |
1019 std::set<gpu::gles2::MemoryTracker*> unique_memory_trackers; | 1019 std::set<gles2::MemoryTracker*> unique_memory_trackers; |
1020 for (auto& kv : stubs_) | 1020 for (auto& kv : stubs_) |
1021 unique_memory_trackers.insert(kv.second->GetMemoryTracker()); | 1021 unique_memory_trackers.insert(kv.second->GetMemoryTracker()); |
1022 | 1022 |
1023 // Sum the memory usage for all unique memory trackers. | 1023 // Sum the memory usage for all unique memory trackers. |
1024 uint64_t size = 0; | 1024 uint64_t size = 0; |
1025 for (auto* tracker : unique_memory_trackers) { | 1025 for (auto* tracker : unique_memory_trackers) { |
1026 size += gpu_channel_manager()->gpu_memory_manager()->GetTrackerMemoryUsage( | 1026 size += gpu_channel_manager()->gpu_memory_manager()->GetTrackerMemoryUsage( |
1027 tracker); | 1027 tracker); |
1028 } | 1028 } |
1029 | 1029 |
(...skipping 28 matching lines...) Expand all Loading... |
1058 ->CreateImageForGpuMemoryBuffer(handle, | 1058 ->CreateImageForGpuMemoryBuffer(handle, |
1059 size, | 1059 size, |
1060 format, | 1060 format, |
1061 internalformat, | 1061 internalformat, |
1062 client_id_); | 1062 client_id_); |
1063 } | 1063 } |
1064 } | 1064 } |
1065 } | 1065 } |
1066 | 1066 |
1067 void GpuChannel::HandleUpdateValueState( | 1067 void GpuChannel::HandleUpdateValueState( |
1068 unsigned int target, const gpu::ValueState& state) { | 1068 unsigned int target, const ValueState& state) { |
1069 pending_valuebuffer_state_->UpdateState(target, state); | 1069 pending_valuebuffer_state_->UpdateState(target, state); |
1070 } | 1070 } |
1071 | 1071 |
1072 } // namespace content | 1072 } // namespace gpu |
OLD | NEW |