James Robinson | 646469d | 2014-10-03 15:33:28 -0700 | [diff] [blame] | 1 | // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #ifndef GPU_COMMAND_BUFFER_SERVICE_ASYNC_PIXEL_TRANSFER_MANAGER_IDLE_H_ |
| 6 | #define GPU_COMMAND_BUFFER_SERVICE_ASYNC_PIXEL_TRANSFER_MANAGER_IDLE_H_ |
| 7 | |
| 8 | #include <list> |
| 9 | |
| 10 | #include "gpu/command_buffer/service/async_pixel_transfer_manager.h" |
| 11 | |
| 12 | namespace gpu { |
| 13 | |
| 14 | class AsyncPixelTransferManagerIdle : public AsyncPixelTransferManager { |
| 15 | public: |
James Robinson | 7b766f4 | 2015-02-06 15:14:04 -0800 | [diff] [blame] | 16 | explicit AsyncPixelTransferManagerIdle( |
| 17 | bool use_teximage2d_over_texsubimage2d); |
James Robinson | e1b30cf | 2014-10-21 12:25:40 -0700 | [diff] [blame] | 18 | ~AsyncPixelTransferManagerIdle() override; |
James Robinson | 646469d | 2014-10-03 15:33:28 -0700 | [diff] [blame] | 19 | |
| 20 | // AsyncPixelTransferManager implementation: |
James Robinson | e1b30cf | 2014-10-21 12:25:40 -0700 | [diff] [blame] | 21 | void BindCompletedAsyncTransfers() override; |
| 22 | void AsyncNotifyCompletion( |
James Robinson | 646469d | 2014-10-03 15:33:28 -0700 | [diff] [blame] | 23 | const AsyncMemoryParams& mem_params, |
James Robinson | baf71d3 | 2014-10-08 13:00:20 -0700 | [diff] [blame] | 24 | AsyncPixelTransferCompletionObserver* observer) override; |
James Robinson | e1b30cf | 2014-10-21 12:25:40 -0700 | [diff] [blame] | 25 | uint32 GetTextureUploadCount() override; |
| 26 | base::TimeDelta GetTotalTextureUploadTime() override; |
| 27 | void ProcessMorePendingTransfers() override; |
| 28 | bool NeedsProcessMorePendingTransfers() override; |
| 29 | void WaitAllAsyncTexImage2D() override; |
James Robinson | 646469d | 2014-10-03 15:33:28 -0700 | [diff] [blame] | 30 | |
| 31 | struct Task { |
| 32 | Task(uint64 transfer_id, |
| 33 | AsyncPixelTransferDelegate* delegate, |
| 34 | const base::Closure& task); |
| 35 | ~Task(); |
| 36 | |
| 37 | // This is non-zero if pixel transfer task. |
| 38 | uint64 transfer_id; |
| 39 | |
| 40 | AsyncPixelTransferDelegate* delegate; |
| 41 | |
| 42 | base::Closure task; |
| 43 | }; |
| 44 | |
| 45 | // State shared between Managers and Delegates. |
| 46 | struct SharedState { |
James Robinson | 7b766f4 | 2015-02-06 15:14:04 -0800 | [diff] [blame] | 47 | explicit SharedState(bool use_teximage2d_over_texsubimage2d); |
James Robinson | 646469d | 2014-10-03 15:33:28 -0700 | [diff] [blame] | 48 | ~SharedState(); |
| 49 | void ProcessNotificationTasks(); |
| 50 | |
James Robinson | 7b766f4 | 2015-02-06 15:14:04 -0800 | [diff] [blame] | 51 | const bool use_teximage2d_over_texsubimage2d; |
James Robinson | 646469d | 2014-10-03 15:33:28 -0700 | [diff] [blame] | 52 | int texture_upload_count; |
| 53 | base::TimeDelta total_texture_upload_time; |
| 54 | std::list<Task> tasks; |
| 55 | }; |
| 56 | |
| 57 | private: |
| 58 | // AsyncPixelTransferManager implementation: |
James Robinson | e1b30cf | 2014-10-21 12:25:40 -0700 | [diff] [blame] | 59 | AsyncPixelTransferDelegate* CreatePixelTransferDelegateImpl( |
James Robinson | 646469d | 2014-10-03 15:33:28 -0700 | [diff] [blame] | 60 | gles2::TextureRef* ref, |
James Robinson | baf71d3 | 2014-10-08 13:00:20 -0700 | [diff] [blame] | 61 | const AsyncTexImage2DParams& define_params) override; |
James Robinson | 646469d | 2014-10-03 15:33:28 -0700 | [diff] [blame] | 62 | |
| 63 | SharedState shared_state_; |
| 64 | |
| 65 | DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferManagerIdle); |
| 66 | }; |
| 67 | |
| 68 | } // namespace gpu |
| 69 | |
| 70 | #endif // GPU_COMMAND_BUFFER_SERVICE_ASYNC_PIXEL_TRANSFER_MANAGER_IDLE_H_ |