blob: 41a77b397dc9a6cccb90b3a072f948ff5929d529 [file] [log] [blame]
James Robinson646469d2014-10-03 15:33:28 -07001// 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:
James Robinson7b766f42015-02-06 15:14:04 -080016 explicit AsyncPixelTransferManagerIdle(
17 bool use_teximage2d_over_texsubimage2d);
James Robinsone1b30cf2014-10-21 12:25:40 -070018 ~AsyncPixelTransferManagerIdle() override;
James Robinson646469d2014-10-03 15:33:28 -070019
20 // AsyncPixelTransferManager implementation:
James Robinsone1b30cf2014-10-21 12:25:40 -070021 void BindCompletedAsyncTransfers() override;
22 void AsyncNotifyCompletion(
James Robinson646469d2014-10-03 15:33:28 -070023 const AsyncMemoryParams& mem_params,
James Robinsonbaf71d32014-10-08 13:00:20 -070024 AsyncPixelTransferCompletionObserver* observer) override;
James Robinsone1b30cf2014-10-21 12:25:40 -070025 uint32 GetTextureUploadCount() override;
26 base::TimeDelta GetTotalTextureUploadTime() override;
27 void ProcessMorePendingTransfers() override;
28 bool NeedsProcessMorePendingTransfers() override;
29 void WaitAllAsyncTexImage2D() override;
James Robinson646469d2014-10-03 15:33:28 -070030
31 struct Task {
32 Task(uint64 transfer_id,
33 AsyncPixelTransferDelegate* delegate,
34 const base::Closure& task);
35 ~Task();
36
37 // This is non-zero if pixel transfer task.
38 uint64 transfer_id;
39
40 AsyncPixelTransferDelegate* delegate;
41
42 base::Closure task;
43 };
44
45 // State shared between Managers and Delegates.
46 struct SharedState {
James Robinson7b766f42015-02-06 15:14:04 -080047 explicit SharedState(bool use_teximage2d_over_texsubimage2d);
James Robinson646469d2014-10-03 15:33:28 -070048 ~SharedState();
49 void ProcessNotificationTasks();
50
James Robinson7b766f42015-02-06 15:14:04 -080051 const bool use_teximage2d_over_texsubimage2d;
James Robinson646469d2014-10-03 15:33:28 -070052 int texture_upload_count;
53 base::TimeDelta total_texture_upload_time;
54 std::list<Task> tasks;
55 };
56
57 private:
58 // AsyncPixelTransferManager implementation:
James Robinsone1b30cf2014-10-21 12:25:40 -070059 AsyncPixelTransferDelegate* CreatePixelTransferDelegateImpl(
James Robinson646469d2014-10-03 15:33:28 -070060 gles2::TextureRef* ref,
James Robinsonbaf71d32014-10-08 13:00:20 -070061 const AsyncTexImage2DParams& define_params) override;
James Robinson646469d2014-10-03 15:33:28 -070062
63 SharedState shared_state_;
64
65 DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferManagerIdle);
66};
67
68} // namespace gpu
69
70#endif // GPU_COMMAND_BUFFER_SERVICE_ASYNC_PIXEL_TRANSFER_MANAGER_IDLE_H_