Home | History | Annotate | Download | only in service
      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:
     16   AsyncPixelTransferManagerIdle();
     17   virtual ~AsyncPixelTransferManagerIdle();
     18 
     19   // AsyncPixelTransferManager implementation:
     20   virtual void BindCompletedAsyncTransfers() OVERRIDE;
     21   virtual void AsyncNotifyCompletion(
     22       const AsyncMemoryParams& mem_params,
     23       AsyncPixelTransferCompletionObserver* observer) OVERRIDE;
     24   virtual uint32 GetTextureUploadCount() OVERRIDE;
     25   virtual base::TimeDelta GetTotalTextureUploadTime() OVERRIDE;
     26   virtual void ProcessMorePendingTransfers() OVERRIDE;
     27   virtual bool NeedsProcessMorePendingTransfers() OVERRIDE;
     28   virtual void WaitAllAsyncTexImage2D() OVERRIDE;
     29 
     30   struct Task {
     31     Task(uint64 transfer_id,
     32          AsyncPixelTransferDelegate* delegate,
     33          const base::Closure& task);
     34     ~Task();
     35 
     36     // This is non-zero if pixel transfer task.
     37     uint64 transfer_id;
     38 
     39     AsyncPixelTransferDelegate* delegate;
     40 
     41     base::Closure task;
     42   };
     43 
     44   // State shared between Managers and Delegates.
     45   struct SharedState {
     46     SharedState();
     47     ~SharedState();
     48     void ProcessNotificationTasks();
     49 
     50     int texture_upload_count;
     51     base::TimeDelta total_texture_upload_time;
     52     std::list<Task> tasks;
     53   };
     54 
     55  private:
     56   // AsyncPixelTransferManager implementation:
     57   virtual AsyncPixelTransferDelegate* CreatePixelTransferDelegateImpl(
     58       gles2::TextureRef* ref,
     59       const AsyncTexImage2DParams& define_params) OVERRIDE;
     60 
     61   SharedState shared_state_;
     62 
     63   DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferManagerIdle);
     64 };
     65 
     66 }  // namespace gpu
     67 
     68 #endif  // GPU_COMMAND_BUFFER_SERVICE_ASYNC_PIXEL_TRANSFER_MANAGER_IDLE_H_
     69