Chromium Code Reviews| Index: gpu/command_buffer/service/buffer_manager.h |
| diff --git a/gpu/command_buffer/service/buffer_manager.h b/gpu/command_buffer/service/buffer_manager.h |
| index bb69e7dfe0c2f2603a82f662b039868c4f0a0de4..845824c56679ceaf6cfce6d27ddd8a8e5cc34a9f 100644 |
| --- a/gpu/command_buffer/service/buffer_manager.h |
| +++ b/gpu/command_buffer/service/buffer_manager.h |
| @@ -78,9 +78,8 @@ class GPU_EXPORT Buffer : public base::RefCounted<Buffer> { |
| // Check if an offset, size range is valid for the current buffer. |
| bool CheckRange(GLintptr offset, GLsizeiptr size) const; |
| - // Sets a range of this buffer's shadowed data. Returns false if offset/size |
| - // is out of range. |
| - bool SetRange(GLintptr offset, GLsizeiptr size, const GLvoid * data); |
| + // Sets a range of this buffer's shadowed data. |
| + void SetRange(GLintptr offset, GLsizeiptr size, const GLvoid * data); |
| bool IsDeleted() const { |
| return deleted_; |
| @@ -96,15 +95,8 @@ class GPU_EXPORT Buffer : public base::RefCounted<Buffer> { |
| void SetMappedRange(GLintptr offset, GLsizeiptr size, GLenum access, |
| void* pointer, scoped_refptr<gpu::Buffer> shm, |
| - unsigned int shm_offset) { |
| - mapped_range_.reset( |
| - new MappedRange(offset, size, access, pointer, shm, shm_offset)); |
| - } |
| - |
| - void RemoveMappedRange() { |
| - mapped_range_.reset(nullptr); |
| - } |
| - |
| + unsigned int shm_offset); |
| + void RemoveMappedRange(); |
| const MappedRange* GetMappedRange() const { |
| return mapped_range_.get(); |
| } |
| @@ -306,6 +298,30 @@ class GPU_EXPORT BufferManager : public base::trace_event::MemoryDumpProvider { |
| bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args, |
| base::trace_event::ProcessMemoryDump* pmd) override; |
| + // Validate if a buffer is bound at target, if it's unmapped, if it's |
| + // large enough. Return the buffer bound to |target| if access is granted; |
| + // return nullptr if a GL error is generated. |
| + Buffer* RequestBufferAccess(ContextState* context_state, |
| + GLenum target, |
| + GLintptr offset, |
| + GLsizeiptr size, |
| + const char* func_name); |
| + // Same as above, but assume to access the entire buffer. |
| + Buffer* RequestBufferAccess(ContextState* context_state, |
| + GLenum target, |
| + const char* func_name); |
| + // Same as above, but it can be any buffer rather than the buffer bound to |
| + // |target|. Return true if access is granted; return false if a GL error is |
| + // generated. |
| + bool RequestBufferAccess(ErrorState* error_state, |
| + Buffer* buffer, |
| + const char* func_name, |
| + const char* message_tag); |
| + |
| + uint32_t mapped_buffer_count() const { |
|
piman
2016/10/24 22:47:11
nit: I didn't see being used. Is that for a follow
|
| + return mapped_buffer_count_; |
| + } |
| + |
| private: |
| friend class Buffer; |
| friend class TestHelper; // Needs access to DoBufferData. |
| @@ -318,7 +334,6 @@ class GPU_EXPORT BufferManager : public base::trace_event::MemoryDumpProvider { |
| // Does a glBufferSubData and updates the appropriate accounting. |
| // Assumes the values have already been validated. |
| void DoBufferSubData( |
| - ErrorState* error_state, |
| Buffer* buffer, |
| GLenum target, |
| GLintptr offset, |
| @@ -357,6 +372,9 @@ class GPU_EXPORT BufferManager : public base::trace_event::MemoryDumpProvider { |
| GLenum usage, |
| bool use_shadow); |
| + void IncreaseMappedBufferCount(); |
| + void DecreaseMappedBufferCount(); |
| + |
| std::unique_ptr<MemoryTypeTracker> memory_type_tracker_; |
| MemoryTracker* memory_tracker_; |
| scoped_refptr<FeatureInfo> feature_info_; |
| @@ -383,6 +401,10 @@ class GPU_EXPORT BufferManager : public base::trace_event::MemoryDumpProvider { |
| bool lost_context_; |
| bool use_client_side_arrays_for_stream_buffers_; |
| + // Keep track of total mapped buffer count. In most use cases it should be 0, |
| + // so we could bypass checking each individual buffer as an optimization. |
| + uint32_t mapped_buffer_count_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(BufferManager); |
| }; |