15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_BROWSER_ANDROID_CONTENT_VIEW_RENDER_VIEW_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_BROWSER_ANDROID_CONTENT_VIEW_RENDER_VIEW_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/android/jni_weak_ref.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h"
107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/scoped_ptr.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/weak_ptr.h"
127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/public/browser/android/compositor_client.h"
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/gfx/native_widget_types.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace cc {
165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass Layer;
175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass Compositor;
215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass LayerTreeBuildHelper;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass ContentViewRenderView : public CompositorClient {
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Registers the JNI methods for ContentViewRender.
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static bool RegisterContentViewRenderView(JNIEnv* env);
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ContentViewRenderView(JNIEnv* env,
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                        jobject obj,
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                        gfx::NativeWindow root_window);
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Methods called from Java via JNI -----------------------------------------
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void Destroy(JNIEnv* env, jobject obj);
34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  void SetCurrentContentViewCore(JNIEnv* env, jobject obj,
35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                 jlong native_content_view_core);
365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void SetLayerTreeBuildHelper(
375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      JNIEnv* env, jobject obj, jlong native_build_helper);
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void SurfaceCreated(JNIEnv* env, jobject obj);
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SurfaceDestroyed(JNIEnv* env, jobject obj);
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void SurfaceChanged(JNIEnv* env, jobject obj,
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                      jint format, jint width, jint height, jobject surface);
4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  jboolean Composite(JNIEnv* env, jobject obj);
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void SetOverlayVideoMode(JNIEnv* env, jobject obj, bool enabled);
4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // CompositorClient implementation
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void Layout() OVERRIDE;
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void OnSwapBuffersCompleted(int pending_swap_buffers) OVERRIDE;
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~ContentViewRenderView();
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void InitCompositor();
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  base::android::ScopedJavaGlobalRef<jobject> java_obj_;
555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  scoped_ptr<LayerTreeBuildHelper> layer_tree_build_helper_;
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  scoped_ptr<content::Compositor> compositor_;
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  gfx::NativeWindow root_window_;
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  int current_surface_format_;
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ContentViewRenderView);
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_BROWSER_ANDROID_CONTENT_VIEW_RENDER_VIEW_H_
70