Index: gpu/command_buffer/service/async_pixel_transfer_manager_compressed.h |
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_compressed.h b/gpu/command_buffer/service/async_pixel_transfer_manager_compressed.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6c28d1ad9d1ff113f7593e3845d87232860befb7 |
--- /dev/null |
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_compressed.h |
@@ -0,0 +1,89 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef GPU_COMMAND_BUFFER_SERVICE_ASYNC_PIXEL_TRANSFER_MANAGER_COMPRESSED_H_ |
+#define GPU_COMMAND_BUFFER_SERVICE_ASYNC_PIXEL_TRANSFER_MANAGER_COMPRESSED_H_ |
+ |
+#include <list> |
+ |
+#include "base/memory/ref_counted.h" |
+#include "gpu/command_buffer/service/async_pixel_transfer_manager.h" |
+#include "gpu/command_buffer/service/async_pixel_transfer_manager_egl.h" |
+#include "gpu/command_buffer/service/async_pixel_transfer_manager_idle.h" |
+ |
+namespace gpu { |
+ |
+class AsyncPixelTransferManagerEGL; |
+class AsyncPixelTransferManagerIdle; |
+ |
+// This AsyncPixelTransferManager implementation enables the dynamic switching |
+// between AsyncPixelTransferManagerEGL and AsyncPixelTransferManagerIdle for |
+// non-compressed and compressed texture uploads respectively. This is needed |
+// when both compressed and non-compressed asynchronous texture uploads are |
+// performed if one wants to use the faster EGL upload path when possible. |
+class AsyncPixelTransferManagerCompressed : public AsyncPixelTransferManager { |
+ public: |
+ AsyncPixelTransferManagerCompressed(); |
+ virtual ~AsyncPixelTransferManagerCompressed(); |
+ |
+ // AsyncPixelTransferManager implementation: |
+ void BindCompletedAsyncTransfers() override; |
+ void AsyncNotifyCompletion( |
+ const AsyncMemoryParams& mem_params, |
+ AsyncPixelTransferCompletionObserver* observer) override; |
+ uint32 GetTextureUploadCount() override; |
+ base::TimeDelta GetTotalTextureUploadTime() override; |
+ void ProcessMorePendingTransfers() override; |
+ bool NeedsProcessMorePendingTransfers() override; |
+ void WaitAllAsyncTexImage2D() override; |
+ |
+ enum Mode { |
+ MODE_EGL, |
+ MODE_IDLE, |
+ }; |
+ |
+ void SwitchMode(enum Mode new_mode); |
+ |
+ Mode mode() const { return mode_; } |
+ |
+ struct SharedState { |
+ SharedState(); |
+ ~SharedState(); |
+ typedef std::list<AsyncPixelTransferDelegate*> DelegateList; |
+ DelegateList delegates; |
+ }; |
+ |
+ SharedState& shared_state() { return shared_state_; } |
+ |
+ private: |
+ // AsyncPixelTransferManager implementation: |
+ AsyncPixelTransferDelegate* CreatePixelTransferDelegateImpl( |
+ gles2::TextureRef* ref, |
+ const AsyncTexImage2DParams& define_params) override; |
+ AsyncPixelTransferDelegate* CreatePixelTransferDelegateImpl( |
+ gles2::TextureRef* ref, |
+ const AsyncCompressedTexImage2DParams& define_params) override; |
+ |
+ AsyncPixelTransferManager* current_manager() const { |
+ switch (mode_) { |
+ case MODE_EGL: |
+ return egl_manager_.get(); |
+ case MODE_IDLE: |
+ return idle_manager_.get(); |
+ } |
+ NOTREACHED(); |
+ return NULL; |
+ } |
+ |
+ enum Mode mode_; |
+ |
+ scoped_ptr<AsyncPixelTransferManagerEGL> egl_manager_; |
+ scoped_ptr<AsyncPixelTransferManagerIdle> idle_manager_; |
+ |
+ SharedState shared_state_; |
+}; |
+ |
+} // namespace gpu |
+ |
+#endif // GPU_COMMAND_BUFFER_SERVICE_ASYNC_PIXEL_TRANSFER_MANAGER_COMPRESSED_H_ |