Chromium Code Reviews| 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 |