| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 // Copyright 2014 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_COMPRESSED_H_ | 
|  | 6 #define GPU_COMMAND_BUFFER_SERVICE_ASYNC_PIXEL_TRANSFER_MANAGER_COMPRESSED_H_ | 
|  | 7 | 
|  | 8 #include <list> | 
|  | 9 | 
|  | 10 #include "base/memory/ref_counted.h" | 
|  | 11 #include "gpu/command_buffer/service/async_pixel_transfer_manager.h" | 
|  | 12 #include "gpu/command_buffer/service/async_pixel_transfer_manager_egl.h" | 
|  | 13 #include "gpu/command_buffer/service/async_pixel_transfer_manager_idle.h" | 
|  | 14 | 
|  | 15 namespace gpu { | 
|  | 16 | 
|  | 17 class AsyncPixelTransferManagerEGL; | 
|  | 18 class AsyncPixelTransferManagerIdle; | 
|  | 19 | 
|  | 20 // This AsyncPixelTransferManager implementation enables the dynamic switching | 
|  | 21 // between AsyncPixelTransferManagerEGL and AsyncPixelTransferManagerIdle for | 
|  | 22 // non-compressed and compressed texture uploads respectively. This is needed | 
|  | 23 // when both compressed and non-compressed asynchronous texture uploads are | 
|  | 24 // performed if one wants to use the faster EGL upload path when possible. | 
|  | 25 class AsyncPixelTransferManagerCompressed : public AsyncPixelTransferManager { | 
|  | 26  public: | 
|  | 27   AsyncPixelTransferManagerCompressed(); | 
|  | 28   virtual ~AsyncPixelTransferManagerCompressed(); | 
|  | 29 | 
|  | 30   // AsyncPixelTransferManager implementation: | 
|  | 31   void BindCompletedAsyncTransfers() override; | 
|  | 32   void AsyncNotifyCompletion( | 
|  | 33       const AsyncMemoryParams& mem_params, | 
|  | 34       AsyncPixelTransferCompletionObserver* observer) override; | 
|  | 35   uint32 GetTextureUploadCount() override; | 
|  | 36   base::TimeDelta GetTotalTextureUploadTime() override; | 
|  | 37   void ProcessMorePendingTransfers() override; | 
|  | 38   bool NeedsProcessMorePendingTransfers() override; | 
|  | 39   void WaitAllAsyncTexImage2D() override; | 
|  | 40 | 
|  | 41   enum Mode { | 
|  | 42     MODE_EGL, | 
|  | 43     MODE_IDLE, | 
|  | 44   }; | 
|  | 45 | 
|  | 46   void SwitchMode(enum Mode new_mode); | 
|  | 47 | 
|  | 48   Mode mode() const { return mode_; } | 
|  | 49 | 
|  | 50   struct SharedState { | 
|  | 51     SharedState(); | 
|  | 52     ~SharedState(); | 
|  | 53     typedef std::list<AsyncPixelTransferDelegate*> DelegateList; | 
|  | 54     DelegateList delegates; | 
|  | 55   }; | 
|  | 56 | 
|  | 57   SharedState& shared_state() { return shared_state_; } | 
|  | 58 | 
|  | 59  private: | 
|  | 60   // AsyncPixelTransferManager implementation: | 
|  | 61   AsyncPixelTransferDelegate* CreatePixelTransferDelegateImpl( | 
|  | 62       gles2::TextureRef* ref, | 
|  | 63       const AsyncTexImage2DParams& define_params) override; | 
|  | 64   AsyncPixelTransferDelegate* CreatePixelTransferDelegateImpl( | 
|  | 65       gles2::TextureRef* ref, | 
|  | 66       const AsyncCompressedTexImage2DParams& define_params) override; | 
|  | 67 | 
|  | 68   AsyncPixelTransferManager* current_manager() const { | 
|  | 69     switch (mode_) { | 
|  | 70       case MODE_EGL: | 
|  | 71         return egl_manager_.get(); | 
|  | 72       case MODE_IDLE: | 
|  | 73         return idle_manager_.get(); | 
|  | 74     } | 
|  | 75     NOTREACHED(); | 
|  | 76     return NULL; | 
|  | 77   } | 
|  | 78 | 
|  | 79   enum Mode mode_; | 
|  | 80 | 
|  | 81   scoped_ptr<AsyncPixelTransferManagerEGL> egl_manager_; | 
|  | 82   scoped_ptr<AsyncPixelTransferManagerIdle> idle_manager_; | 
|  | 83 | 
|  | 84   SharedState shared_state_; | 
|  | 85 }; | 
|  | 86 | 
|  | 87 }  // namespace gpu | 
|  | 88 | 
|  | 89 #endif  // GPU_COMMAND_BUFFER_SERVICE_ASYNC_PIXEL_TRANSFER_MANAGER_COMPRESSED_H_ | 
| OLD | NEW | 
|---|