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_STREAM_TEXTURE_MANAGER_IN_PROCESS_ANDROID_H_
6#define GPU_STREAM_TEXTURE_MANAGER_IN_PROCESS_ANDROID_H_
7
8#include <map>
9
10#include "base/memory/ref_counted.h"
11#include "base/memory/weak_ptr.h"
12#include "base/synchronization/lock.h"
13#include "base/threading/non_thread_safe.h"
14
15namespace gfx {
16class SurfaceTexture;
17}
18
19namespace gpu {
20
21namespace gles2 {
22class TextureManager;
23}
24
25class StreamTextureManagerInProcess : public base::NonThreadSafe {
26 public:
27  StreamTextureManagerInProcess();
28  ~StreamTextureManagerInProcess();
29
30  uint32 CreateStreamTexture(uint32 client_texture_id,
31                             gles2::TextureManager* texture_manager);
32
33  // This method can be called from any thread.
34  scoped_refptr<gfx::SurfaceTexture> GetSurfaceTexture(uint32 stream_id);
35
36 private:
37  void OnReleaseStreamTexture(uint32 stream_id);
38
39  typedef std::map<uint32, scoped_refptr<gfx::SurfaceTexture> > TextureMap;
40  TextureMap textures_;
41  base::Lock map_lock_;
42  uint32 next_id_;
43
44  base::WeakPtrFactory<StreamTextureManagerInProcess> weak_factory_;
45  DISALLOW_COPY_AND_ASSIGN(StreamTextureManagerInProcess);
46};
47
48}  // gpu
49
50#endif  // GPU_STREAM_TEXTURE_MANAGER_IN_PROCESS_ANDROID_H_
51