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
12namespace gpu {
13
14class 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