| 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_ | 
|  |