Commit f5725087 authored by Francois Doray's avatar Francois Doray Committed by Commit Bot

Add LifecycleUnit::Freeze().

A frozen LifecycleUnit can't use the CPU.

Note: This feature will  be test by a browser test in
https://chromium-review.googlesource.com/c/chromium/src/+/980742/5/chrome/browser/resource_coordinator/tab_manager_browsertest.cc#814

Bug: 775644
Change-Id: I5b5aac616e7a5d28b61f379d841da2b75420300d
Reviewed-on: https://chromium-review.googlesource.com/981396
Commit-Queue: François Doray <fdoray@chromium.org>
Reviewed-by: default avatarSébastien Marchand <sebmarchand@chromium.org>
Reviewed-by: default avatarFadi Meawad <fmeawad@chromium.org>
Cr-Commit-Position: refs/heads/master@{#547714}
parent 8de4733a
...@@ -47,6 +47,7 @@ class DummyLifecycleUnit : public LifecycleUnitBase { ...@@ -47,6 +47,7 @@ class DummyLifecycleUnit : public LifecycleUnitBase {
base::string16 GetTitle() const override { return base::string16(); } base::string16 GetTitle() const override { return base::string16(); }
std::string GetIconURL() const override { return std::string(); } std::string GetIconURL() const override { return std::string(); }
SortKey GetSortKey() const override { return SortKey(last_focused_time_); } SortKey GetSortKey() const override { return SortKey(last_focused_time_); }
bool Freeze() override { return false; }
int GetEstimatedMemoryFreedOnDiscardKB() const override { return 0; } int GetEstimatedMemoryFreedOnDiscardKB() const override { return 0; }
bool CanDiscard(DiscardReason reason) const override { return false; } bool CanDiscard(DiscardReason reason) const override { return false; }
bool Discard(DiscardReason discard_reason) override { return false; } bool Discard(DiscardReason discard_reason) override { return false; }
......
...@@ -78,6 +78,10 @@ class LifecycleUnit { ...@@ -78,6 +78,10 @@ class LifecycleUnit {
// Returns the last time that the visibility of the LifecycleUnit changed. // Returns the last time that the visibility of the LifecycleUnit changed.
virtual base::TimeTicks GetLastVisibilityChangeTime() const = 0; virtual base::TimeTicks GetLastVisibilityChangeTime() const = 0;
// Freezes this LifecycleUnit, i.e. prevents it from using the CPU. Returns
// true on success.
virtual bool Freeze() = 0;
// Returns the estimated number of kilobytes that would be freed if this // Returns the estimated number of kilobytes that would be freed if this
// LifecycleUnit was discarded. // LifecycleUnit was discarded.
// //
......
...@@ -45,6 +45,7 @@ class DummyLifecycleUnit : public LifecycleUnitBase { ...@@ -45,6 +45,7 @@ class DummyLifecycleUnit : public LifecycleUnitBase {
std::string GetIconURL() const override { return std::string(); } std::string GetIconURL() const override { return std::string(); }
SortKey GetSortKey() const override { return SortKey(); } SortKey GetSortKey() const override { return SortKey(); }
State GetState() const override { return State::LOADED; } State GetState() const override { return State::LOADED; }
bool Freeze() override { return false; }
int GetEstimatedMemoryFreedOnDiscardKB() const override { return 0; } int GetEstimatedMemoryFreedOnDiscardKB() const override { return 0; }
bool CanDiscard(DiscardReason reason) const override { return false; } bool CanDiscard(DiscardReason reason) const override { return false; }
bool Discard(DiscardReason discard_reason) override { return false; } bool Discard(DiscardReason discard_reason) override { return false; }
......
...@@ -99,6 +99,16 @@ LifecycleUnit::SortKey TabLifecycleUnitSource::TabLifecycleUnit::GetSortKey() ...@@ -99,6 +99,16 @@ LifecycleUnit::SortKey TabLifecycleUnitSource::TabLifecycleUnit::GetSortKey()
return SortKey(last_focused_time_); return SortKey(last_focused_time_);
} }
bool TabLifecycleUnitSource::TabLifecycleUnit::Freeze() {
// Can't freeze tabs that are already discarded or frozen.
// TODO(fmeawad): Don't freeze already frozen tabs.
if (GetState() != State::LOADED)
return false;
GetWebContents()->FreezePage();
return true;
}
int TabLifecycleUnitSource::TabLifecycleUnit:: int TabLifecycleUnitSource::TabLifecycleUnit::
GetEstimatedMemoryFreedOnDiscardKB() const { GetEstimatedMemoryFreedOnDiscardKB() const {
// TODO(fdoray): Implement this. https://crbug.com/775644 // TODO(fdoray): Implement this. https://crbug.com/775644
...@@ -297,6 +307,10 @@ bool TabLifecycleUnitSource::TabLifecycleUnit::DiscardTab() { ...@@ -297,6 +307,10 @@ bool TabLifecycleUnitSource::TabLifecycleUnit::DiscardTab() {
return Discard(DiscardReason::kExternal); return Discard(DiscardReason::kExternal);
} }
bool TabLifecycleUnitSource::TabLifecycleUnit::FreezeTab() {
return Freeze();
}
bool TabLifecycleUnitSource::TabLifecycleUnit::IsDiscarded() const { bool TabLifecycleUnitSource::TabLifecycleUnit::IsDiscarded() const {
return GetState() == State::DISCARDED; return GetState() == State::DISCARDED;
} }
......
...@@ -75,6 +75,7 @@ class TabLifecycleUnitSource::TabLifecycleUnit ...@@ -75,6 +75,7 @@ class TabLifecycleUnitSource::TabLifecycleUnit
base::string16 GetTitle() const override; base::string16 GetTitle() const override;
std::string GetIconURL() const override; std::string GetIconURL() const override;
SortKey GetSortKey() const override; SortKey GetSortKey() const override;
bool Freeze() override;
int GetEstimatedMemoryFreedOnDiscardKB() const override; int GetEstimatedMemoryFreedOnDiscardKB() const override;
bool CanDiscard(DiscardReason reason) const override; bool CanDiscard(DiscardReason reason) const override;
bool Discard(DiscardReason discard_reason) override; bool Discard(DiscardReason discard_reason) override;
...@@ -84,6 +85,7 @@ class TabLifecycleUnitSource::TabLifecycleUnit ...@@ -84,6 +85,7 @@ class TabLifecycleUnitSource::TabLifecycleUnit
bool IsMediaTab() const override; bool IsMediaTab() const override;
bool IsAutoDiscardable() const override; bool IsAutoDiscardable() const override;
void SetAutoDiscardable(bool auto_discardable) override; void SetAutoDiscardable(bool auto_discardable) override;
bool FreezeTab() override;
bool DiscardTab() override; bool DiscardTab() override;
bool IsDiscarded() const override; bool IsDiscarded() const override;
int GetDiscardCount() const override; int GetDiscardCount() const override;
......
...@@ -35,6 +35,9 @@ class TabLifecycleUnitExternal { ...@@ -35,6 +35,9 @@ class TabLifecycleUnitExternal {
// Allows/disallows this tab to be automatically discarded. // Allows/disallows this tab to be automatically discarded.
virtual void SetAutoDiscardable(bool auto_discardable) = 0; virtual void SetAutoDiscardable(bool auto_discardable) = 0;
// Freezes the tab.
virtual bool FreezeTab() = 0;
// Discards the tab. // Discards the tab.
virtual bool DiscardTab() = 0; virtual bool DiscardTab() = 0;
......
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