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_EGL_H_
6#define GPU_COMMAND_BUFFER_SERVICE_ASYNC_PIXEL_TRANSFER_MANAGER_EGL_H_
7
8#include "gpu/command_buffer/service/async_pixel_transfer_manager.h"
9
10#include "base/memory/ref_counted.h"
11
12namespace gpu {
13class AsyncPixelTransferDelegateEGL;
14class AsyncPixelTransferUploadStats;
15
16class AsyncPixelTransferManagerEGL : public AsyncPixelTransferManager {
17 public:
18  AsyncPixelTransferManagerEGL();
19  virtual ~AsyncPixelTransferManagerEGL();
20
21  // AsyncPixelTransferManager implementation:
22  virtual void BindCompletedAsyncTransfers() OVERRIDE;
23  virtual void AsyncNotifyCompletion(
24      const AsyncMemoryParams& mem_params,
25      AsyncPixelTransferCompletionObserver* observer) OVERRIDE;
26  virtual uint32 GetTextureUploadCount() OVERRIDE;
27  virtual base::TimeDelta GetTotalTextureUploadTime() OVERRIDE;
28  virtual void ProcessMorePendingTransfers() OVERRIDE;
29  virtual bool NeedsProcessMorePendingTransfers() OVERRIDE;
30  virtual void WaitAllAsyncTexImage2D() OVERRIDE;
31
32  // State shared between Managers and Delegates.
33  struct SharedState {
34    SharedState();
35    ~SharedState();
36
37    scoped_refptr<AsyncPixelTransferUploadStats> texture_upload_stats;
38    bool is_imagination;
39    bool is_qualcomm;
40    typedef std::list<base::WeakPtr<AsyncPixelTransferDelegateEGL> >
41        TransferQueue;
42    TransferQueue pending_allocations;
43  };
44
45 private:
46  // AsyncPixelTransferManager implementation:
47  virtual AsyncPixelTransferDelegate* CreatePixelTransferDelegateImpl(
48      gles2::TextureRef* ref,
49      const AsyncTexImage2DParams& define_params) OVERRIDE;
50
51  SharedState shared_state_;
52
53  DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferManagerEGL);
54};
55
56}  // namespace gpu
57
58#endif  // GPU_COMMAND_BUFFER_SERVICE_ASYNC_PIXEL_TRANSFER_MANAGER_EGL_H_
59