Skip to content

Commit e240aa9

Browse files
committed
update: migrate demo_skia to M120
1 parent 037a870 commit e240aa9

File tree

9 files changed

+39
-97
lines changed

9 files changed

+39
-97
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ Demo list:
5050
1. [M120] `demo_views`: Demonstrate the use of `//ui/views` to create UI;
5151
1. `demo_apk`: Demonstrate the creation of Android applications, the use of base::android::* and JNI;
5252
1. `demo_android_skia`: Demonstrate the use of Skia for software rendering and hardware rendering on Android;
53-
1. [M110] `demo_skia`: Demonstrate the use of Skia for software rendering and hardware rendering on Linux;
53+
1. [M120] `demo_skia`: Demonstrate the use of Skia for software rendering and hardware rendering on Linux;
5454
1. `demo_x11`: Demonstrate using X11 to create transparent windows;
5555
1. `demo_x11_glx`: Demonstrate the use of glx in a transparent window;
5656
1. `demo_x11_egl`: Demonstrate the use of egl in a transparent window;

README_zh.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Demo 列表:
4343
1. [M120] `demo_views`: 演示使用 `//ui/views` 创建 UI;
4444
1. `demo_apk`: 演示创建 Android 应用,base::android::* 和 JNI 的使用;
4545
1. `demo_android_skia`: 演示在 Android 上使用 Skia 进行软件渲染和硬件渲染;
46-
1. [M110] `demo_skia`: 演示在 Linux 上使用 Skia 进行软件渲染和硬件渲染;
46+
1. [M120] `demo_skia`: 演示在 Linux 上使用 Skia 进行软件渲染和硬件渲染;
4747
1. `demo_x11`: 演示使用 X11 创建透明窗口;
4848
1. `demo_x11_glx`: 演示在透明窗口中使用 glx;
4949
1. `demo_x11_egl`: 演示在透明窗口中使用 egl;

demo_skia/demo_skia.cc

Lines changed: 3 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,20 @@
11
#include "base/at_exit.h"
2-
#include "base/callback.h"
32
#include "base/command_line.h"
4-
#include "base/files/file_path.h"
53
#include "base/i18n/icu_util.h"
64
#include "base/logging.h"
7-
#include "base/memory/ptr_util.h"
85
#include "base/message_loop/message_pump_type.h"
9-
#include "base/path_service.h"
10-
#include "base/power_monitor/power_monitor.h"
11-
#include "base/power_monitor/power_monitor_device_source.h"
126
#include "base/run_loop.h"
137
#include "base/task/single_thread_task_executor.h"
148
#include "base/task/thread_pool/thread_pool_instance.h"
15-
#include "base/test/task_environment.h"
16-
#include "base/test/test_discardable_memory_allocator.h"
17-
#include "base/test/test_timeouts.h"
189
#include "base/threading/thread.h"
19-
#include "build/build_config.h"
20-
#include "build/buildflag.h"
21-
#include "components/viz/common/quads/solid_color_draw_quad.h"
22-
#include "components/viz/demo/host/demo_host.h"
23-
#include "components/viz/demo/service/demo_service.h"
24-
#include "components/viz/host/host_frame_sink_manager.h"
25-
#include "components/viz/host/renderer_settings_creation.h"
26-
#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h"
27-
#include "components/viz/service/frame_sinks/frame_sink_manager_impl.h"
28-
#include "components/viz/service/main/viz_compositor_thread_runner_impl.h"
29-
#include "mojo/core/embedder/embedder.h"
30-
#include "mojo/core/embedder/scoped_ipc_support.h"
31-
#include "mojo/public/cpp/bindings/pending_receiver.h"
32-
#include "mojo/public/cpp/bindings/pending_remote.h"
33-
#include "services/viz/privileged/mojom/viz_main.mojom.h"
34-
#include "ui/base/hit_test.h"
35-
#include "ui/base/ime/init/input_method_initializer.h"
36-
#include "ui/base/resource/resource_bundle.h"
3710
#include "ui/base/ui_base_paths.h"
38-
#include "ui/base/x/visual_picker_glx.h"
3911
#include "ui/base/x/x11_util.h"
4012
#include "ui/display/screen.h"
4113
#include "ui/events/event.h"
42-
#include "ui/events/event_constants.h"
4314
#include "ui/events/platform/platform_event_source.h"
4415
#include "ui/gfx/canvas.h"
45-
#include "ui/gfx/font_util.h"
4616
#include "ui/gfx/geometry/rect.h"
4717
#include "ui/gfx/native_widget_types.h"
48-
#include "ui/gfx/skia_util.h"
49-
#include "ui/gfx/x/xproto.h"
50-
#include "ui/gl/gl_switches.h"
51-
#include "ui/gl/init/gl_factory.h"
5218
#include "ui/platform_window/platform_window.h"
5319
#include "ui/platform_window/platform_window_delegate.h"
5420
#include "ui/platform_window/platform_window_init_properties.h"
@@ -58,7 +24,6 @@
5824

5925
#if defined(USE_AURA)
6026
#include "ui/aura/env.h"
61-
#include "ui/wm/core/wm_state.h"
6227
#endif
6328

6429
#if defined(USE_X11)
@@ -87,7 +52,7 @@ namespace demo {
8752
// compositor.
8853
class DemoWindowHost : public ui::PlatformWindowDelegate {
8954
public:
90-
DemoWindowHost(base::OnceClosure close_closure)
55+
explicit DemoWindowHost(base::OnceClosure close_closure)
9156
: close_closure_(std::move(close_closure)) {}
9257
~DemoWindowHost() override = default;
9358

@@ -201,7 +166,7 @@ class DemoWindowHost : public ui::PlatformWindowDelegate {
201166
action = 2;
202167
else
203168
return;
204-
auto located_event = event->AsLocatedEvent();
169+
auto* located_event = event->AsLocatedEvent();
205170
auto location = located_event->location();
206171
if (action != 2)
207172
DLOG(INFO) << "action,x,y= " << action << "," << location.x() << ","
@@ -241,11 +206,7 @@ int main(int argc, char** argv) {
241206
base::CommandLine::Init(argc, argv);
242207
// 设置日志格式
243208
logging::SetLogItems(true, true, true, false);
244-
// 启动 Trace
245-
auto trace_config =
246-
base::trace_event::TraceConfig("startup" /*, "trace-to-console"*/);
247-
base::trace_event::TraceLog::GetInstance()->SetEnabled(
248-
trace_config, base::trace_event::TraceLog::RECORDING_MODE);
209+
249210
// 创建主消息循环,等价于 MessagLoop
250211
base::SingleThreadTaskExecutor main_task_executor(base::MessagePumpType::UI);
251212
// 初始化线程池,会创建新的线程,在新的线程中会创建新消息循环MessageLoop

demo_skia/skia_canvas.cc

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11

22
#include "demo/demo_skia/skia_canvas.h"
33

4-
#include "base/bind.h"
54
#include "base/files/file.h"
65
#include "base/files/file_path.h"
7-
#include "base/lazy_instance.h"
6+
#include "base/logging.h"
87
#include "base/memory/ref_counted_memory.h"
9-
#include "base/threading/thread_task_runner_handle.h"
10-
#include "base/trace_event/common/trace_event_common.h"
11-
#include "base/trace_event/trace_event.h"
8+
#include "base/task/single_thread_task_runner.h"
129
#include "base/trace_event/trace_log.h"
13-
#include "demo/demo_skia/skia_canvas_gl.h"
1410

1511
namespace demo_jni {
1612

@@ -64,16 +60,6 @@ void FlushTrace() {
6460
}));
6561
}
6662

67-
// static int SkiaCanvasInit(
68-
// bool useGL) {
69-
// DLOG(INFO) << "[demo_android_skia] JNI_SkiaCanvas_Init";
70-
// if (!g_message_loop) {
71-
// DemoMain();
72-
// }
73-
// if (useGL)
74-
// return reinterpret_cast<intptr_t>(new SkiaCanvasGL(env, caller, surface));
75-
// }
76-
7763
SkiaCanvas::SkiaCanvas(gfx::AcceleratedWidget widget,int width,int height)
7864
: nativeWindow_(widget),
7965
width_(width),
@@ -97,6 +83,8 @@ SkiaCanvas::SkiaCanvas(gfx::AcceleratedWidget widget,int width,int height)
9783
base::Unretained(this)));
9884
}
9985

86+
SkiaCanvas::~SkiaCanvas() = default;
87+
10088
void SkiaCanvas::InitializeOnRenderThread() {}
10189

10290
// Android 系统会控制触摸事件的频率在 60 pps
@@ -175,7 +163,7 @@ void SkiaCanvas::OnRenderOnRenderThread() {
175163
TRACE_EVENT0("shell", "paint");
176164
auto paint_start_time = base::TimeTicks::Now();
177165
TRACE_EVENT0("shell", "BeginPaint");
178-
auto canvas = BeginPaint();
166+
auto* canvas = BeginPaint();
179167
TRACE_EVENT0("shell", "draw");
180168
canvas->clear(background_);
181169
canvas->drawPath(skPath_, pathPaint_);
@@ -208,7 +196,7 @@ void SkiaCanvas::ShowFrameRateOnRenderThread() {
208196
<< " swap= " << (total_swap_time_ / frame_count_).InMilliseconds() << " ms"
209197
<< " touch= " << (total_touch_time_ / touch_count_).InMilliseconds()
210198
<< " ms";
211-
base::ThreadTaskRunnerHandle::Get()->PostTask(
199+
base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
212200
FROM_HERE,
213201
base::BindOnce(&SkiaCanvas::ShowInfo, base::Unretained(this), ss.str()));
214202
}

demo_skia/skia_canvas.h

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,19 @@
22
#define DEMO_DEMO_SKIA_SKIA_CANVAS_H
33

44
#include "base/threading/thread.h"
5-
6-
#include "ui/gfx/native_widget_types.h"
7-
8-
#include "base/logging.h"
5+
#include "base/timer/timer.h"
96
#include "third_party/skia/include/core/SkBitmap.h"
107
#include "third_party/skia/include/core/SkCanvas.h"
11-
#include "third_party/skia/include/core/SkImageInfo.h"
128
#include "third_party/skia/include/core/SkPath.h"
139
#include "third_party/skia/include/core/SkSurface.h"
14-
15-
#include "base/timer/timer.h"
10+
#include "ui/gfx/native_widget_types.h"
1611

1712
namespace demo_jni {
1813

1914
class SkiaCanvas {
2015
public:
2116
void OnTouch(int action, float x, float y);
22-
virtual ~SkiaCanvas() {}
17+
virtual ~SkiaCanvas();
2318
virtual void Resize(int width, int height) {}
2419

2520
protected:

demo_skia/skia_canvas_gl.cc

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
11

22
#include "demo/demo_skia/skia_canvas_gl.h"
33

4-
#include "base/bind.h"
5-
#include "base/lazy_instance.h"
4+
#include "base/logging.h"
65
#include "base/trace_event/trace_event.h"
7-
#include "third_party/skia/include/core/SkBitmap.h"
6+
#include "include/gpu/ganesh/gl/GrGLBackendSurface.h"
87
#include "third_party/skia/include/core/SkCanvas.h"
9-
#include "third_party/skia/include/core/SkColor.h"
10-
#include "third_party/skia/include/core/SkDeferredDisplayListRecorder.h"
118
#include "third_party/skia/include/core/SkExecutor.h"
12-
#include "third_party/skia/include/core/SkImageInfo.h"
13-
#include "third_party/skia/include/core/SkPath.h"
14-
#include "third_party/skia/include/core/SkRRect.h"
159
#include "third_party/skia/include/core/SkSurface.h"
16-
#include "third_party/skia/include/core/SkSurfaceCharacterization.h"
10+
#include "third_party/skia/include/gpu/ganesh/SkSurfaceGanesh.h"
11+
#include "third_party/skia/include/gpu/ganesh/gl/GrGLDirectContext.h"
1712
#include "third_party/skia/include/gpu/gl/GrGLAssembleInterface.h"
1813
#include "third_party/skia/include/gpu/gl/GrGLInterface.h"
19-
#include "ui/gl/gl_version_info.h"
20-
#include "ui/gl/init/create_gr_gl_interface.h"
14+
#include "third_party/skia/include/gpu/mock/GrMockTypes.h"
15+
#include "third_party/skia/include/private/chromium/GrDeferredDisplayList.h"
16+
#include "third_party/skia/include/private/chromium/GrSurfaceCharacterization.h"
2117

2218
#ifndef GL_RGBA8
2319
#define GL_RGBA8 0x8058
@@ -446,7 +442,7 @@ void SkiaCanvasGL::InitializeOnRenderThread() {
446442
DCHECK(grGLInterface_);
447443

448444
grContext_ =
449-
GrDirectContext::MakeGL(grGLInterface_, CreateGrContextOptions());
445+
GrDirectContexts::MakeGL(grGLInterface_, CreateGrContextOptions());
450446
DCHECK(grContext_);
451447
SkiaCanvas::InitializeOnRenderThread();
452448
}
@@ -482,22 +478,23 @@ SkCanvas* SkiaCanvasGL::BeginPaint() {
482478
fb_info.fFBOID = buffer;
483479
fb_info.fFormat = color_format_ /*GL_RGBA8*/;
484480

485-
GrBackendRenderTarget backendRT(width_, height_, sampleCount_, stencilBits_,
486-
fb_info);
481+
GrMockRenderTargetInfo m;
482+
GrBackendRenderTarget backendRT = GrBackendRenderTargets::MakeGL(
483+
width_, height_, sampleCount_, stencilBits_, fb_info);
487484
SkSurfaceProps props(SkSurfaceProps::kUseDistanceFieldFonts_Flag,
488485
SkPixelGeometry::kRGB_H_SkPixelGeometry);
489-
skSurface_ = SkSurface::MakeFromBackendRenderTarget(
486+
skSurface_ = SkSurfaces::WrapBackendRenderTarget(
490487
grContext_.get(), backendRT, kBottomLeft_GrSurfaceOrigin,
491488
color_format_ == GL_RGBA8 ? kRGBA_8888_SkColorType : kRGB_565_SkColorType,
492489
nullptr, &props);
493490
SkCanvas* canvas;
494491
if (use_ddl_) {
495-
SkSurfaceCharacterization characterization;
492+
GrSurfaceCharacterization characterization;
496493
bool result = skSurface_->characterize(&characterization);
497494
DCHECK(result) << "Failed to characterize raster SkSurface.";
498495
// 使用 ddl 来记录绘制操作,并不执行真正的绘制
499496
recorder_ =
500-
std::make_unique<SkDeferredDisplayListRecorder>(characterization);
497+
std::make_unique<GrDeferredDisplayListRecorder>(characterization);
501498

502499
canvas = recorder_->getCanvas();
503500
}
@@ -509,10 +506,10 @@ void SkiaCanvasGL::OnPaint(SkCanvas* canvas) {
509506
if (use_ddl_) {
510507
// 必须在list销毁前flush
511508
auto list = recorder_->detach();
512-
DCHECK(skSurface_->draw(list));
513-
skSurface_->flush();
514-
} else
515-
skSurface_->flush();
509+
DCHECK(skgpu::ganesh::DrawDDL(skSurface_, list));
510+
}
511+
grContext_->flushAndSubmit();
512+
// glFinish();
516513
}
517514

518515
void SkiaCanvasGL::SwapBuffer() {

demo_skia/skia_canvas_gl.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414

1515
#include "demo/demo_skia/skia_canvas.h"
1616

17-
#include "third_party/skia/include/core/SkDeferredDisplayListRecorder.h"
17+
// #include "third_party/skia/include/core/SkDeferredDisplayListRecorder.h"
1818
#include "third_party/skia/include/core/SkSurface.h"
19-
#include "third_party/skia/include/gpu/GrContextOptions.h"
2019
#include "third_party/skia/include/gpu/GrDirectContext.h"
2120
#include "third_party/skia/include/gpu/gl/GrGLInterface.h"
21+
#include "third_party/skia/include/private/chromium/GrDeferredDisplayListRecorder.h"
2222

2323
namespace demo_jni {
2424

@@ -44,7 +44,7 @@ class SkiaCanvasGL : public SkiaCanvas {
4444
sk_sp<const GrGLInterface> grGLInterface_;
4545
sk_sp<GrDirectContext> grContext_;
4646
bool use_ddl_ = false;
47-
std::unique_ptr<SkDeferredDisplayListRecorder> recorder_;
47+
std::unique_ptr<GrDeferredDisplayListRecorder> recorder_;
4848
};
4949

5050
} // namespace demo_jni

demo_skia/skia_canvas_software.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11

22
#include "demo/demo_skia/skia_canvas_software.h"
33

4-
#include "base/bind.h"
5-
#include "base/lazy_instance.h"
64
#include "base/trace_event/trace_event.h"
75
#include "ui/gfx/x/connection.h"
86

@@ -14,6 +12,8 @@ SkiaCanvasSoftware::SkiaCanvasSoftware(gfx::AcceleratedWidget widget,int width,i
1412
tag_ = "SkiaCanvasSoftware";
1513
}
1614

15+
SkiaCanvasSoftware::~SkiaCanvasSoftware() = default;
16+
1717
void SkiaCanvasSoftware::InitializeOnRenderThread() {
1818
TRACE_EVENT0("shell", "SkiaCanvasSoftware::InitializeOnRenderThread");
1919
x11_presenter_ = std::make_unique<ui::X11SoftwareBitmapPresenter>(
@@ -22,7 +22,7 @@ void SkiaCanvasSoftware::InitializeOnRenderThread() {
2222
// 当 format = AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM = 4
2323
// 时,一个像素占2个字节,所以x2
2424
// memset(buffer.bits, 0xAA, buffer.stride * buffer.height * 2);
25-
auto canvas = BeginPaint();
25+
auto* canvas = BeginPaint();
2626
canvas->clear(background_);
2727
//canvas->drawCircle(20, 20, 20, circlePaint_);
2828
OnPaint(canvas);

demo_skia/skia_canvas_software.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ namespace demo_jni {
1010
class SkiaCanvasSoftware : public SkiaCanvas {
1111
public:
1212
SkiaCanvasSoftware(gfx::AcceleratedWidget widget,int width,int height);
13+
~SkiaCanvasSoftware() override;
1314
void InitializeOnRenderThread() override;
1415
void Resize(int width, int height) override;
1516
void OnPaint(SkCanvas* canvas) override;

0 commit comments

Comments
 (0)