Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(107)

Unified Diff: chromeos/display/output_configurator.cc

Issue 139053003: Chrome OS: avoid suspending on lid close when casting is active. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove dependencies of chrome in ash. Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chromeos/display/output_configurator.cc
diff --git a/chromeos/display/output_configurator.cc b/chromeos/display/output_configurator.cc
index fb545aaf7cb45720c94884524486f5cdce3374a5..3edb3a00026694ccb63a9e90fb1da19b5e881be6 100644
--- a/chromeos/display/output_configurator.cc
+++ b/chromeos/display/output_configurator.cc
@@ -106,20 +106,6 @@ int GetOutputPower(
return num_on_outputs;
}
-// Determine if there is an "internal" output and how many outputs are
-// connected.
-bool IsProjecting(
- const std::vector<OutputConfigurator::OutputSnapshot>& outputs) {
- bool has_internal_output = false;
- int connected_output_count = outputs.size();
- for (size_t i = 0; i < outputs.size(); ++i)
- has_internal_output |= outputs[i].type == OUTPUT_TYPE_INTERNAL;
-
- // "Projecting" is defined as having more than 1 output connected while at
- // least one of them is an internal output.
- return has_internal_output && (connected_output_count > 1);
-}
-
} // namespace
OutputConfigurator::ModeInfo::ModeInfo()
@@ -252,7 +238,8 @@ OutputConfigurator::OutputConfigurator()
xrandr_event_base_(0),
output_state_(STATE_INVALID),
power_state_(DISPLAY_POWER_ALL_ON),
- next_output_protection_client_id_(1) {
+ next_output_protection_client_id_(1),
+ screen_sharing_count_(0) {
}
OutputConfigurator::~OutputConfigurator() {}
@@ -267,6 +254,18 @@ void OutputConfigurator::SetInitialDisplayPower(DisplayPowerState power_state) {
power_state_ = power_state;
}
+void OutputConfigurator::SendProjectingStateToPowerManager() {
Daniel Erat 2014/01/15 22:42:59 the order of methods in the .cc file should match
hshi1 2014/01/16 02:01:44 Done.
+ bool has_internal_output = false;
+ int connected_output_count = cached_outputs_.size() + screen_sharing_count_;
+ for (size_t i = 0; i < cached_outputs_.size(); ++i)
+ has_internal_output |= cached_outputs_[i].type == OUTPUT_TYPE_INTERNAL;
Daniel Erat 2014/01/15 22:42:59 nit: just do: if (cached_outputs_[i].type == OU
hshi1 2014/01/16 02:01:44 Done.
+
+ // "Projecting" is defined as having more than 1 output connected while at
+ // least one of them is an internal output.
+ bool is_projecting = has_internal_output && (connected_output_count > 1);
+ delegate_->SendProjectingStateToPowerManager(is_projecting);
+}
+
void OutputConfigurator::Init(bool is_panel_fitting_enabled) {
is_panel_fitting_enabled_ = is_panel_fitting_enabled;
if (!configure_display_)
@@ -294,7 +293,7 @@ void OutputConfigurator::Start(uint32 background_color_argb) {
// that all displays are on when signing out.
delegate_->ForceDPMSOn();
delegate_->UngrabServer();
- delegate_->SendProjectingStateToPowerManager(IsProjecting(cached_outputs_));
+ SendProjectingStateToPowerManager();
NotifyObservers(success, new_state);
}
@@ -777,7 +776,7 @@ void OutputConfigurator::ConfigureOutputs() {
delegate_->UngrabServer();
NotifyObservers(success, new_state);
- delegate_->SendProjectingStateToPowerManager(IsProjecting(cached_outputs_));
+ SendProjectingStateToPowerManager();
}
void OutputConfigurator::NotifyObservers(bool success,
@@ -1136,4 +1135,14 @@ float OutputConfigurator::GetMirroredDisplayAreaRatio(
return area_ratio;
}
+void OutputConfigurator::OnScreenSharingStateChanged(bool started) {
Daniel Erat 2014/01/15 22:42:59 same here
hshi1 2014/01/16 02:01:44 Done.
+ if (started) {
+ ++screen_sharing_count_;
Daniel Erat 2014/01/15 22:42:59 indent two spaces beyond the previous line, not fo
hshi1 2014/01/16 02:01:44 Done.
+ } else {
+ DCHECK_GT(screen_sharing_count_, 0);
+ --screen_sharing_count_;
+ }
+ SendProjectingStateToPowerManager();
+}
+
} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698