[go: nahoru, domu]

blob: d9ddbc0a7cea09e76813679caa9537c0e2e3127e [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_PAINT_PREVIEW_PLAYER_ANDROID_PLAYER_COMPOSITOR_DELEGATE_ANDROID_H_
#define COMPONENTS_PAINT_PREVIEW_PLAYER_ANDROID_PLAYER_COMPOSITOR_DELEGATE_ANDROID_H_
#include "base/android/jni_android.h"
#include "base/android/scoped_java_ref.h"
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "base/task/task_runner.h"
#include "base/time/time.h"
#include "components/paint_preview/player/player_compositor_delegate.h"
namespace paint_preview {
class PaintPreviewBaseService;
struct JavaBitmapResult;
class PlayerCompositorDelegateAndroid : public PlayerCompositorDelegate {
public:
PlayerCompositorDelegateAndroid(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& j_object,
PaintPreviewBaseService* paint_preview_service,
jlong j_capture_result_ptr,
const base::android::JavaParamRef<jstring>& j_url_spec,
const base::android::JavaParamRef<jstring>& j_directory_key,
jboolean j_main_frame_mode,
const base::android::JavaParamRef<jobject>& j_compositor_error_callback,
jboolean j_is_low_mem);
void OnCompositorReady(
CompositorStatus compositor_status,
mojom::PaintPreviewBeginCompositeResponsePtr composite_response,
float page_scale_factor,
std::unique_ptr<ui::AXTreeUpdate> ax_tree) override;
void OnMemoryPressure(base::MemoryPressureListener::MemoryPressureLevel
memory_pressure_level) override;
base::android::ScopedJavaLocalRef<jintArray> GetRootFrameOffsets(JNIEnv* env);
// Called from Java when there is a request for a new bitmap. When the bitmap
// is ready, it will be passed to j_bitmap_callback. In case of any failure,
// j_error_callback will be called.
jint RequestBitmap(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& j_frame_guid,
const base::android::JavaParamRef<jobject>& j_bitmap_callback,
const base::android::JavaParamRef<jobject>& j_error_callback,
jfloat j_scale_factor,
jint j_clip_x,
jint j_clip_y,
jint j_clip_width,
jint j_clip_height);
jboolean CancelBitmapRequest(JNIEnv* env, jint j_request_id);
void CancelAllBitmapRequests(JNIEnv* env);
// Called from Java on touch event on a frame.
base::android::ScopedJavaLocalRef<jstring> OnClick(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& j_frame_guid,
jint j_x,
jint j_y);
// Called to set if compression should happen at close time.
void SetCompressOnClose(JNIEnv* env, jboolean compress_on_close);
void Destroy(JNIEnv* env);
static void CompositeResponseFramesToVectors(
const base::flat_map<base::UnguessableToken, mojom::FrameDataPtr>& frames,
std::vector<base::UnguessableToken>* all_guids,
std::vector<int>* scroll_extents,
std::vector<int>* scroll_offsets,
std::vector<int>* subframe_count,
std::vector<base::UnguessableToken>* subframe_ids,
std::vector<int>* subframe_rects);
private:
~PlayerCompositorDelegateAndroid() override;
void OnJavaBitmapCallback(
const base::android::ScopedJavaGlobalRef<jobject>& j_bitmap_callback,
const base::android::ScopedJavaGlobalRef<jobject>& j_error_callback,
int request_id,
JavaBitmapResult result);
// Points to corresponding the Java object.
base::android::ScopedJavaGlobalRef<jobject> java_ref_;
int request_id_;
// Task runner for converting bitmaps allows parallel and not in order.
scoped_refptr<base::TaskRunner> task_runner_;
base::TimeTicks startup_timestamp_;
base::WeakPtrFactory<PlayerCompositorDelegateAndroid> weak_factory_{this};
PlayerCompositorDelegateAndroid(const PlayerCompositorDelegateAndroid&) =
delete;
PlayerCompositorDelegateAndroid& operator=(
const PlayerCompositorDelegateAndroid&) = delete;
}; // namespace paint_preview
} // namespace paint_preview
#endif // COMPONENTS_PAINT_PREVIEW_PLAYER_ANDROID_PLAYER_COMPOSITOR_DELEGATE_ANDROID_H_