Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 957bd3d

Browse files
committed
fix fuchsia, fix test for AOT
1 parent d6c50a1 commit 957bd3d

11 files changed

+47
-46
lines changed

flow/compositor_context.cc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@
99

1010
namespace flutter {
1111

12-
CompositorContext::CompositorContext(Delegate& delegate,
13-
fml::Milliseconds frame_budget)
14-
: delegate_(delegate), raster_time_(frame_budget), ui_time_(frame_budget) {}
12+
CompositorContext::CompositorContext(Delegate& delegate)
13+
: delegate_(delegate),
14+
raster_time_(delegate.GetFrameBudget()),
15+
ui_time_(delegate.GetFrameBudget()) {}
1516

1617
CompositorContext::~CompositorContext() = default;
1718

flow/compositor_context.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,11 @@ class CompositorContext {
3939
public:
4040
class Delegate {
4141
public:
42+
/// Called at the end of a frame with approximately how many bytes mightbe
43+
/// freed if a GC ran now.
4244
virtual void OnCompositorEndFrame(size_t freed_hint) = 0;
45+
/// Time limit for a smooth frame. See `Engine::GetDisplayRefreshRate`.
46+
virtual fml::Milliseconds GetFrameBudget() = 0;
4347
};
4448

4549
class ScopedFrame {
@@ -88,8 +92,7 @@ class CompositorContext {
8892
FML_DISALLOW_COPY_AND_ASSIGN(ScopedFrame);
8993
};
9094

91-
CompositorContext(Delegate& delegate,
92-
fml::Milliseconds frame_budget = fml::kDefaultFrameBudget);
95+
explicit CompositorContext(Delegate& delegate);
9396

9497
virtual ~CompositorContext();
9598

flow/layers/layer_tree_unittests.cc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class LayerTreeTest : public CanvasTest, public CompositorContext::Delegate {
2323
public:
2424
LayerTreeTest()
2525
: layer_tree_(SkISize::Make(64, 64), 100.0f, 1.0f),
26-
compositor_context_(*this, fml::kDefaultFrameBudget),
26+
compositor_context_(*this),
2727
root_transform_(SkMatrix::Translate(1.0f, 1.0f)),
2828
scoped_frame_(compositor_context_.AcquireFrame(nullptr,
2929
&mock_canvas(),
@@ -37,10 +37,15 @@ class LayerTreeTest : public CanvasTest, public CompositorContext::Delegate {
3737
CompositorContext::ScopedFrame& frame() { return *scoped_frame_.get(); }
3838
const SkMatrix& root_transform() { return root_transform_; }
3939

40+
4041
void OnCompositorEndFrame(size_t freed_hint) override {
4142
last_freed_hint_ = freed_hint;
4243
}
4344

45+
fml::Milliseconds GetFrameBudget() override {
46+
return fml::kDefaultFrameBudget;
47+
}
48+
4449
size_t last_freed_hint() { return last_freed_hint_; }
4550

4651
private:

lib/ui/painting/image_release_unittests.cc

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,12 @@ TEST_F(ShellTest, ImageReleasedAfterFrame) {
4343
auto nativeDone = [&](Dart_NativeArguments args) { message_latch.Signal(); };
4444

4545
Settings settings = CreateSettingsForFixture();
46+
auto task_runner = CreateNewThread();
4647
TaskRunners task_runners("test", // label
4748
GetCurrentTaskRunner(), // platform
48-
CreateNewThread(), // raster
49-
CreateNewThread(), // ui
50-
CreateNewThread() // io
49+
task_runner, // raster
50+
task_runner, // ui
51+
task_runner // io
5152
);
5253

5354
AddNativeCallback("CaptureImageAndPicture",
@@ -74,22 +75,19 @@ TEST_F(ShellTest, ImageReleasedAfterFrame) {
7475
ASSERT_TRUE(current_picture);
7576
ASSERT_TRUE(current_image);
7677

77-
ASSERT_FALSE(current_picture->unique());
78-
ASSERT_FALSE(current_image->unique());
79-
80-
// Drain the raster task runner to get to the end of the frame.
81-
fml::AutoResetWaitableEvent latch;
82-
task_runners.GetRasterTaskRunner()->PostTask([&latch]() { latch.Signal(); });
83-
latch.Wait();
84-
85-
// Tell the engine we're idle.
86-
task_runners.GetUITaskRunner()->PostTask(
87-
[&latch, engine = shell->GetEngine()]() {
88-
ASSERT_TRUE(engine);
89-
engine->NotifyIdle(Dart_TimelineGetMicros() + 10000);
90-
latch.Signal();
91-
});
92-
latch.Wait();
78+
// AOT modes are fast enough that we get here before the task runner has
79+
// had a chance to drain. Make sure that if the picture or image are not
80+
// already unique, at least one idle notification has a chance to process
81+
// after rasterization has occurred.
82+
if (!current_picture->unique() || !current_image->unique()) {
83+
fml::AutoResetWaitableEvent latch;
84+
task_runner->PostTask([&latch, engine = shell->GetEngine()]() {
85+
ASSERT_TRUE(engine);
86+
engine->NotifyIdle(Dart_TimelineGetMicros() + 10000);
87+
latch.Signal();
88+
});
89+
latch.Wait();
90+
}
9391

9492
EXPECT_TRUE(current_picture->unique());
9593
current_picture.reset();

shell/common/rasterizer.cc

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@ static constexpr std::chrono::milliseconds kSkiaCleanupExpiration(15000);
2727

2828
Rasterizer::Rasterizer(Delegate& delegate)
2929
: Rasterizer(delegate,
30-
std::make_unique<flutter::CompositorContext>(
31-
*this,
32-
delegate.GetFrameBudget())) {}
30+
std::make_unique<flutter::CompositorContext>(delegate)) {}
3331

3432
Rasterizer::Rasterizer(
3533
Delegate& delegate,
@@ -264,10 +262,6 @@ sk_sp<SkImage> Rasterizer::ConvertToRasterImage(sk_sp<SkImage> image) {
264262
});
265263
}
266264

267-
void Rasterizer::OnCompositorEndFrame(size_t freed_hint) {
268-
delegate_.OnCompositorFrameEnd(freed_hint);
269-
}
270-
271265
RasterStatus Rasterizer::DoDraw(
272266
std::unique_ptr<flutter::LayerTree> layer_tree) {
273267
FML_DCHECK(delegate_.GetTaskRunners()

shell/common/rasterizer.h

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ namespace flutter {
3838
/// and the on-screen render surface. The compositor context has all the GPU
3939
/// state necessary to render frames to the render surface.
4040
///
41-
class Rasterizer final : public SnapshotDelegate,
42-
public CompositorContext::Delegate {
41+
class Rasterizer final : public SnapshotDelegate {
4342
public:
4443
//----------------------------------------------------------------------------
4544
/// @brief Used to forward events from the rasterizer to interested
@@ -51,7 +50,7 @@ class Rasterizer final : public SnapshotDelegate,
5150
/// are made on the GPU task runner. Any delegate must ensure that
5251
/// they can handle the threading implications.
5352
///
54-
class Delegate {
53+
class Delegate : public CompositorContext::Delegate {
5554
public:
5655
//--------------------------------------------------------------------------
5756
/// @brief Notifies the delegate that a frame has been rendered. The
@@ -69,8 +68,6 @@ class Rasterizer final : public SnapshotDelegate,
6968
///
7069
virtual void OnFrameRasterized(const FrameTiming& frame_timing) = 0;
7170

72-
virtual void OnCompositorFrameEnd(size_t freed_hint) = 0;
73-
7471
/// Time limit for a smooth frame. See `Engine::GetDisplayRefreshRate`.
7572
virtual fml::Milliseconds GetFrameBudget() = 0;
7673

@@ -415,9 +412,6 @@ class Rasterizer final : public SnapshotDelegate,
415412
// |SnapshotDelegate|
416413
sk_sp<SkImage> ConvertToRasterImage(sk_sp<SkImage> image) override;
417414

418-
// |CompositorContext::Delegate|
419-
void OnCompositorEndFrame(size_t freed_hint) override;
420-
421415
sk_sp<SkData> ScreenshotLayerTreeAsImage(
422416
flutter::LayerTree* tree,
423417
flutter::CompositorContext& compositor_context,

shell/common/shell.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1200,7 +1200,7 @@ void Shell::OnFrameRasterized(const FrameTiming& timing) {
12001200
}
12011201
}
12021202

1203-
void Shell::OnCompositorFrameEnd(size_t freed_hint) {
1203+
void Shell::OnCompositorEndFrame(size_t freed_hint) {
12041204
if (engine_) {
12051205
engine_->HintFreed(freed_hint);
12061206
}

shell/common/shell.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include "flutter/common/settings.h"
1414
#include "flutter/common/task_runners.h"
15+
#include "flutter/flow/compositor_context.h"
1516
#include "flutter/flow/surface.h"
1617
#include "flutter/flow/texture.h"
1718
#include "flutter/fml/closure.h"
@@ -528,13 +529,14 @@ class Shell final : public PlatformView::Delegate,
528529
void OnFrameRasterized(const FrameTiming&) override;
529530

530531
// |Rasterizer::Delegate|
531-
void OnCompositorFrameEnd(size_t freed_hint) override;
532+
fml::TimePoint GetLatestFrameTargetTime() const override;
532533

533534
// |Rasterizer::Delegate|
535+
// |CompositorContext::Delegate|
534536
fml::Milliseconds GetFrameBudget() override;
535537

536-
// |Rasterizer::Delegate|
537-
fml::TimePoint GetLatestFrameTargetTime() const override;
538+
// |CompositorContext::Delegate|
539+
void OnCompositorEndFrame(size_t freed_hint) override;
538540

539541
// |ServiceProtocol::Handler|
540542
fml::RefPtr<fml::TaskRunner> GetServiceProtocolHandlerTaskRunner(

shell/platform/fuchsia/flutter/compositor_context.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,15 @@ class ScopedFrame final : public flutter::CompositorContext::ScopedFrame {
6565
};
6666

6767
CompositorContext::CompositorContext(
68+
flutter::CompositorContext::Delegate& delegate,
6869
std::string debug_label,
6970
fuchsia::ui::views::ViewToken view_token,
7071
scenic::ViewRefPair view_ref_pair,
7172
fidl::InterfaceHandle<fuchsia::ui::scenic::Session> session,
7273
fml::closure session_error_callback,
7374
zx_handle_t vsync_event_handle)
74-
: debug_label_(std::move(debug_label)),
75+
: flutter::CompositorContext(delegate),
76+
debug_label_(std::move(debug_label)),
7577
session_connection_(
7678
debug_label_,
7779
std::move(view_token),

shell/platform/fuchsia/flutter/compositor_context.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ namespace flutter_runner {
2121
// Fuchsia.
2222
class CompositorContext final : public flutter::CompositorContext {
2323
public:
24-
CompositorContext(std::string debug_label,
24+
CompositorContext(CompositorContext::Delegate& delegate,
25+
std::string debug_label,
2526
fuchsia::ui::views::ViewToken view_token,
2627
scenic::ViewRefPair view_ref_pair,
2728
fidl::InterfaceHandle<fuchsia::ui::scenic::Session> session,

shell/platform/fuchsia/flutter/engine.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ Engine::Engine(Delegate& delegate,
221221
TRACE_DURATION("flutter", "CreateCompositorContext");
222222
compositor_context =
223223
std::make_unique<flutter_runner::CompositorContext>(
224+
shell,
224225
thread_label, // debug label
225226
std::move(view_token), // scenic view we attach our tree to
226227
std::move(view_ref_pair), // scenic view ref/view ref control

0 commit comments

Comments
 (0)