OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "components/mus/gles2/command_buffer_local.h" | 5 #include "components/mus/gles2/command_buffer_local.h" |
6 | 6 |
7 #include "base/atomic_sequence_num.h" | 7 #include "base/atomic_sequence_num.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/memory/shared_memory.h" | 9 #include "base/memory/shared_memory.h" |
10 #include "base/synchronization/waitable_event.h" | 10 #include "base/synchronization/waitable_event.h" |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 // and it will be deleted on the GPU thread. So we have to detach it from the | 94 // and it will be deleted on the GPU thread. So we have to detach it from the |
95 // client thread first. | 95 // client thread first. |
96 DetachFromThread(); | 96 DetachFromThread(); |
97 | 97 |
98 weak_factory_.InvalidateWeakPtrs(); | 98 weak_factory_.InvalidateWeakPtrs(); |
99 // CommandBufferLocal is initialized on the GPU thread with | 99 // CommandBufferLocal is initialized on the GPU thread with |
100 // InitializeOnGpuThread(), so we need delete memebers on the GPU thread | 100 // InitializeOnGpuThread(), so we need delete memebers on the GPU thread |
101 // too. Additionally we need to make sure we are deleted before returning, | 101 // too. Additionally we need to make sure we are deleted before returning, |
102 // otherwise we may attempt to use the AcceleratedWidget which has since been | 102 // otherwise we may attempt to use the AcceleratedWidget which has since been |
103 // destroyed. | 103 // destroyed. |
104 base::WaitableEvent event(true, false); | 104 base::WaitableEvent event(base::WaitableEvent::ResetPolicy::MANUAL, |
| 105 base::WaitableEvent::InitialState::NOT_SIGNALED); |
105 gpu_state_->command_buffer_task_runner()->PostTask( | 106 gpu_state_->command_buffer_task_runner()->PostTask( |
106 driver_.get(), base::Bind(&CommandBufferLocal::DeleteOnGpuThread, | 107 driver_.get(), base::Bind(&CommandBufferLocal::DeleteOnGpuThread, |
107 base::Unretained(this), &event)); | 108 base::Unretained(this), &event)); |
108 event.Wait(); | 109 event.Wait(); |
109 } | 110 } |
110 | 111 |
111 bool CommandBufferLocal::Initialize() { | 112 bool CommandBufferLocal::Initialize() { |
112 DCHECK(CalledOnValidThread()); | 113 DCHECK(CalledOnValidThread()); |
113 base::ThreadRestrictions::ScopedAllowWait allow_wait; | 114 base::ThreadRestrictions::ScopedAllowWait allow_wait; |
114 base::WaitableEvent event(true, false); | 115 base::WaitableEvent event(base::WaitableEvent::ResetPolicy::MANUAL, |
| 116 base::WaitableEvent::InitialState::NOT_SIGNALED); |
115 bool result = false; | 117 bool result = false; |
116 gpu_state_->command_buffer_task_runner()->task_runner()->PostTask( | 118 gpu_state_->command_buffer_task_runner()->task_runner()->PostTask( |
117 FROM_HERE, | 119 FROM_HERE, |
118 base::Bind(&CommandBufferLocal::InitializeOnGpuThread, | 120 base::Bind(&CommandBufferLocal::InitializeOnGpuThread, |
119 base::Unretained(this), base::Unretained(&event), | 121 base::Unretained(this), base::Unretained(&event), |
120 base::Unretained(&result))); | 122 base::Unretained(&result))); |
121 event.Wait(); | 123 event.Wait(); |
122 return result; | 124 return result; |
123 } | 125 } |
124 | 126 |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
424 | 426 |
425 CommandBufferLocal::~CommandBufferLocal() {} | 427 CommandBufferLocal::~CommandBufferLocal() {} |
426 | 428 |
427 void CommandBufferLocal::TryUpdateState() { | 429 void CommandBufferLocal::TryUpdateState() { |
428 if (last_state_.error == gpu::error::kNoError) | 430 if (last_state_.error == gpu::error::kNoError) |
429 shared_state()->Read(&last_state_); | 431 shared_state()->Read(&last_state_); |
430 } | 432 } |
431 | 433 |
432 void CommandBufferLocal::MakeProgressAndUpdateState() { | 434 void CommandBufferLocal::MakeProgressAndUpdateState() { |
433 base::ThreadRestrictions::ScopedAllowWait allow_wait; | 435 base::ThreadRestrictions::ScopedAllowWait allow_wait; |
434 base::WaitableEvent event(true, false); | 436 base::WaitableEvent event(base::WaitableEvent::ResetPolicy::MANUAL, |
| 437 base::WaitableEvent::InitialState::NOT_SIGNALED); |
435 gpu::CommandBuffer::State state; | 438 gpu::CommandBuffer::State state; |
436 gpu_state_->command_buffer_task_runner()->PostTask( | 439 gpu_state_->command_buffer_task_runner()->PostTask( |
437 driver_.get(), | 440 driver_.get(), |
438 base::Bind(&CommandBufferLocal::MakeProgressOnGpuThread, | 441 base::Bind(&CommandBufferLocal::MakeProgressOnGpuThread, |
439 base::Unretained(this), base::Unretained(&event), | 442 base::Unretained(this), base::Unretained(&event), |
440 base::Unretained(&state))); | 443 base::Unretained(&state))); |
441 event.Wait(); | 444 event.Wait(); |
442 if (state.generation - last_state_.generation < 0x80000000U) | 445 if (state.generation - last_state_.generation < 0x80000000U) |
443 last_state_ = state; | 446 last_state_ = state; |
444 } | 447 } |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
573 client_->UpdateVSyncParameters(timebase, interval); | 576 client_->UpdateVSyncParameters(timebase, interval); |
574 } | 577 } |
575 | 578 |
576 void CommandBufferLocal::OnGpuCompletedSwapBuffersOnClientThread( | 579 void CommandBufferLocal::OnGpuCompletedSwapBuffersOnClientThread( |
577 gfx::SwapResult result) { | 580 gfx::SwapResult result) { |
578 if (client_) | 581 if (client_) |
579 client_->GpuCompletedSwapBuffers(result); | 582 client_->GpuCompletedSwapBuffers(result); |
580 } | 583 } |
581 | 584 |
582 } // namespace mus | 585 } // namespace mus |
OLD | NEW |