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 "gpu/command_buffer/service/command_buffer_service.h" | 5 #include "gpu/command_buffer/service/command_buffer_service.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 | 81 |
82 put_offset_ = put_offset; | 82 put_offset_ = put_offset; |
83 | 83 |
84 if (!put_offset_change_callback_.is_null()) | 84 if (!put_offset_change_callback_.is_null()) |
85 put_offset_change_callback_.Run(); | 85 put_offset_change_callback_.Run(); |
86 } | 86 } |
87 | 87 |
88 void CommandBufferService::SetGetBuffer(int32 transfer_buffer_id) { | 88 void CommandBufferService::SetGetBuffer(int32 transfer_buffer_id) { |
89 DCHECK_EQ(-1, ring_buffer_id_); | 89 DCHECK_EQ(-1, ring_buffer_id_); |
90 DCHECK_EQ(put_offset_, get_offset_); // Only if it's empty. | 90 DCHECK_EQ(put_offset_, get_offset_); // Only if it's empty. |
| 91 // If the buffer is invalid we handle it gracefully. |
| 92 // This means ring_buffer_ can be NULL. |
91 ring_buffer_ = GetTransferBuffer(transfer_buffer_id); | 93 ring_buffer_ = GetTransferBuffer(transfer_buffer_id); |
92 DCHECK(ring_buffer_); | |
93 ring_buffer_id_ = transfer_buffer_id; | 94 ring_buffer_id_ = transfer_buffer_id; |
94 num_entries_ = ring_buffer_->size() / sizeof(CommandBufferEntry); | 95 int32 size = ring_buffer_ ? ring_buffer_->size() : 0; |
| 96 num_entries_ = size / sizeof(CommandBufferEntry); |
95 put_offset_ = 0; | 97 put_offset_ = 0; |
96 SetGetOffset(0); | 98 SetGetOffset(0); |
97 if (!get_buffer_change_callback_.is_null()) { | 99 if (!get_buffer_change_callback_.is_null()) { |
98 get_buffer_change_callback_.Run(ring_buffer_id_); | 100 get_buffer_change_callback_.Run(ring_buffer_id_); |
99 } | 101 } |
100 | 102 |
101 UpdateState(); | 103 UpdateState(); |
102 } | 104 } |
103 | 105 |
104 bool CommandBufferService::SetSharedStateBuffer( | 106 bool CommandBufferService::SetSharedStateBuffer( |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 const GetBufferChangedCallback& callback) { | 190 const GetBufferChangedCallback& callback) { |
189 get_buffer_change_callback_ = callback; | 191 get_buffer_change_callback_ = callback; |
190 } | 192 } |
191 | 193 |
192 void CommandBufferService::SetParseErrorCallback( | 194 void CommandBufferService::SetParseErrorCallback( |
193 const base::Closure& callback) { | 195 const base::Closure& callback) { |
194 parse_error_callback_ = callback; | 196 parse_error_callback_ = callback; |
195 } | 197 } |
196 | 198 |
197 } // namespace gpu | 199 } // namespace gpu |
OLD | NEW |