Commit 51af4920 authored by Michael Lippautz's avatar Michael Lippautz Committed by Chromium LUCI CQ

FrameCaret: Avoid dynamic allocation of timer task

A past refactoring translated `unique_ptr<TaskRunnerTimer>` to
`Member<DisallowNewWrapper<HeapTaskRunnerTimer>>` to preserve
semantics. Inline HeapTaskRunnerTimer which avoids a dynamic
allocation.

Change-Id: I8a859c068c9889b5e2bafb01619138ad2f1e0e59
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2642326Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Michael Lippautz <mlippautz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#845644}
parent 9e30f607
...@@ -50,11 +50,9 @@ FrameCaret::FrameCaret(LocalFrame& frame, ...@@ -50,11 +50,9 @@ FrameCaret::FrameCaret(LocalFrame& frame,
: selection_editor_(&selection_editor), : selection_editor_(&selection_editor),
frame_(frame), frame_(frame),
display_item_client_(new CaretDisplayItemClient()), display_item_client_(new CaretDisplayItemClient()),
caret_blink_timer_(MakeGarbageCollected< caret_blink_timer_(frame.GetTaskRunner(TaskType::kInternalDefault),
DisallowNewWrapper<HeapTaskRunnerTimer<FrameCaret>>>(
frame.GetTaskRunner(TaskType::kInternalDefault),
this, this,
&FrameCaret::CaretBlinkTimerFired)) {} &FrameCaret::CaretBlinkTimerFired) {}
FrameCaret::~FrameCaret() = default; FrameCaret::~FrameCaret() = default;
...@@ -104,22 +102,22 @@ void FrameCaret::UpdateAppearance() { ...@@ -104,22 +102,22 @@ void FrameCaret::UpdateAppearance() {
} }
void FrameCaret::StopCaretBlinkTimer() { void FrameCaret::StopCaretBlinkTimer() {
if (caret_blink_timer_->Value().IsActive() || if (caret_blink_timer_.IsActive() ||
display_item_client_->IsVisibleIfActive()) display_item_client_->IsVisibleIfActive())
ScheduleVisualUpdateForPaintInvalidationIfNeeded(); ScheduleVisualUpdateForPaintInvalidationIfNeeded();
display_item_client_->SetVisibleIfActive(false); display_item_client_->SetVisibleIfActive(false);
caret_blink_timer_->Value().Stop(); caret_blink_timer_.Stop();
} }
void FrameCaret::StartBlinkCaret() { void FrameCaret::StartBlinkCaret() {
// Start blinking with a black caret. Be sure not to restart if we're // Start blinking with a black caret. Be sure not to restart if we're
// already blinking in the right location. // already blinking in the right location.
if (caret_blink_timer_->Value().IsActive()) if (caret_blink_timer_.IsActive())
return; return;
base::TimeDelta blink_interval = LayoutTheme::GetTheme().CaretBlinkInterval(); base::TimeDelta blink_interval = LayoutTheme::GetTheme().CaretBlinkInterval();
if (!blink_interval.is_zero()) if (!blink_interval.is_zero())
caret_blink_timer_->Value().StartRepeating(blink_interval, FROM_HERE); caret_blink_timer_.StartRepeating(blink_interval, FROM_HERE);
display_item_client_->SetVisibleIfActive(true); display_item_client_->SetVisibleIfActive(true);
ScheduleVisualUpdateForPaintInvalidationIfNeeded(); ScheduleVisualUpdateForPaintInvalidationIfNeeded();
...@@ -224,9 +222,7 @@ void FrameCaret::ScheduleVisualUpdateForPaintInvalidationIfNeeded() { ...@@ -224,9 +222,7 @@ void FrameCaret::ScheduleVisualUpdateForPaintInvalidationIfNeeded() {
void FrameCaret::RecreateCaretBlinkTimerForTesting( void FrameCaret::RecreateCaretBlinkTimerForTesting(
scoped_refptr<base::SingleThreadTaskRunner> task_runner) { scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
caret_blink_timer_ = caret_blink_timer_.MoveToNewTaskRunner(std::move(task_runner));
MakeGarbageCollected<DisallowNewWrapper<HeapTaskRunnerTimer<FrameCaret>>>(
std::move(task_runner), this, &FrameCaret::CaretBlinkTimerFired);
} }
bool FrameCaret::IsVisibleIfActiveForTesting() const { bool FrameCaret::IsVisibleIfActiveForTesting() const {
......
...@@ -102,8 +102,7 @@ class CORE_EXPORT FrameCaret final : public GarbageCollected<FrameCaret> { ...@@ -102,8 +102,7 @@ class CORE_EXPORT FrameCaret final : public GarbageCollected<FrameCaret> {
const Member<LocalFrame> frame_; const Member<LocalFrame> frame_;
const std::unique_ptr<CaretDisplayItemClient> display_item_client_; const std::unique_ptr<CaretDisplayItemClient> display_item_client_;
// TODO(https://crbug.com/668758): Consider using BeginFrame update for this. // TODO(https://crbug.com/668758): Consider using BeginFrame update for this.
Member<DisallowNewWrapper<HeapTaskRunnerTimer<FrameCaret>>> HeapTaskRunnerTimer<FrameCaret> caret_blink_timer_;
caret_blink_timer_;
bool is_caret_enabled_ = false; bool is_caret_enabled_ = false;
bool should_show_caret_ = false; bool should_show_caret_ = false;
bool is_caret_blinking_suspended_ = false; bool is_caret_blinking_suspended_ = false;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment