diff options
Diffstat (limited to 'chromium/ui/display/manager')
15 files changed, 242 insertions, 40 deletions
diff --git a/chromium/ui/display/manager/configure_displays_task.cc b/chromium/ui/display/manager/configure_displays_task.cc index 1b37056d62c..9bb4b1a4967 100644 --- a/chromium/ui/display/manager/configure_displays_task.cc +++ b/chromium/ui/display/manager/configure_displays_task.cc @@ -7,6 +7,7 @@ #include "base/auto_reset.h" #include "base/bind.h" #include "base/containers/queue.h" +#include "base/logging.h" #include "base/metrics/histogram_functions.h" #include "base/stl_util.h" #include "ui/display/manager/display_util.h" diff --git a/chromium/ui/display/manager/display_change_observer.cc b/chromium/ui/display/manager/display_change_observer.cc index 93961fa5a03..89a9139d3fe 100644 --- a/chromium/ui/display/manager/display_change_observer.cc +++ b/chromium/ui/display/manager/display_change_observer.cc @@ -77,6 +77,51 @@ ManagedDisplayInfo::ManagedDisplayModeList GetModeListWithAllRefreshRates( return display_mode_list; } +#if defined(OS_CHROMEOS) +// Constructs the raster DisplayColorSpaces out of |snapshot_color_space|, +// including the HDR ones if present and |allow_high_bit_depth| is set. +gfx::DisplayColorSpaces FillDisplayColorSpaces( + const gfx::ColorSpace& snapshot_color_space, + bool allow_high_bit_depth) { + // ChromeOS VMs (e.g. amd64-generic or betty) have INVALID Primaries; just + // pass the color space along. + if (!snapshot_color_space.IsValid()) { + return gfx::DisplayColorSpaces(snapshot_color_space, + DisplaySnapshot::PrimaryFormat()); + } + + // TODO(b/158126931): |snapshot_color_space| Primaries/Transfer function + // cannot be used directly, as users prefer saturated colors to accurate ones. + // Instead, clamp at DCI-P3 and clamp at that level or with a small overshoot. + gfx::DisplayColorSpaces display_color_spaces( + gfx::ColorSpace::CreateSRGB(), DisplaySnapshot::PrimaryFormat()); + + if (allow_high_bit_depth) { + constexpr float kSDRJoint = 0.5; + constexpr float kHDRLevel = 3.0; + const auto primary_id = snapshot_color_space.GetPrimaryID(); + gfx::ColorSpace hdr_color_space; + if (primary_id == gfx::ColorSpace::PrimaryID::CUSTOM) { + skcms_Matrix3x3 primary_matrix{}; + snapshot_color_space.GetPrimaryMatrix(&primary_matrix); + hdr_color_space = gfx::ColorSpace::CreatePiecewiseHDR( + primary_id, kSDRJoint, kHDRLevel, &primary_matrix); + } else { + hdr_color_space = + gfx::ColorSpace::CreatePiecewiseHDR(primary_id, kSDRJoint, kHDRLevel); + } + + display_color_spaces.SetOutputColorSpaceAndBufferFormat( + gfx::ContentColorUsage::kHDR, false /* needs_alpha */, hdr_color_space, + gfx::BufferFormat::RGBA_1010102); + display_color_spaces.SetOutputColorSpaceAndBufferFormat( + gfx::ContentColorUsage::kHDR, true /* needs_alpha */, hdr_color_space, + gfx::BufferFormat::RGBA_1010102); + } + return display_color_spaces; +} +#endif + } // namespace // static @@ -337,21 +382,22 @@ ManagedDisplayInfo DisplayChangeObserver::CreateManagedDisplayInfo( if (dpi) new_info.set_device_dpi(dpi); +#if !defined(OS_CHROMEOS) // TODO(crbug.com/1012846): This should configure the HDR color spaces. gfx::DisplayColorSpaces display_color_spaces( snapshot->color_space(), DisplaySnapshot::PrimaryFormat()); new_info.set_display_color_spaces(display_color_spaces); new_info.set_bits_per_channel(snapshot->bits_per_channel()); - - // TODO(crbug.com/1012846): Remove this flag and provision when HDR is fully - // supported on ChromeOS. -#if defined(OS_CHROMEOS) +#else + // TODO(crbug.com/1012846): Remove kEnableUseHDRTransferFunction usage when + // HDR is fully supported on ChromeOS. + const bool allow_high_bit_depth = + base::FeatureList::IsEnabled(features::kUseHDRTransferFunction); + new_info.set_display_color_spaces( + FillDisplayColorSpaces(snapshot->color_space(), allow_high_bit_depth)); constexpr int32_t kNormalBitDepth = 8; - if (new_info.bits_per_channel() > kNormalBitDepth && - !base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kEnableUseHDRTransferFunction)) { - new_info.set_bits_per_channel(kNormalBitDepth); - } + new_info.set_bits_per_channel( + allow_high_bit_depth ? snapshot->bits_per_channel() : kNormalBitDepth); #endif new_info.set_refresh_rate(mode_info->refresh_rate()); diff --git a/chromium/ui/display/manager/display_change_observer.h b/chromium/ui/display/manager/display_change_observer.h index 0e896e24e5e..5c17ce60977 100644 --- a/chromium/ui/display/manager/display_change_observer.h +++ b/chromium/ui/display/manager/display_change_observer.h @@ -60,6 +60,8 @@ class DISPLAY_MANAGER_EXPORT DisplayChangeObserver DISPLAY_EXPORT static float FindDeviceScaleFactor(float dpi); private: + friend class DisplayChangeObserverTest; + void UpdateInternalDisplay( const DisplayConfigurator::DisplayStateList& display_states); diff --git a/chromium/ui/display/manager/display_change_observer_unittest.cc b/chromium/ui/display/manager/display_change_observer_unittest.cc index bb900209bac..91d90d99f55 100644 --- a/chromium/ui/display/manager/display_change_observer_unittest.cc +++ b/chromium/ui/display/manager/display_change_observer_unittest.cc @@ -14,8 +14,11 @@ #include "ui/display/display_switches.h" #include "ui/display/fake/fake_display_snapshot.h" #include "ui/display/manager/display_configurator.h" +#include "ui/display/manager/display_manager.h" #include "ui/display/manager/managed_display_info.h" +#include "ui/display/screen.h" #include "ui/display/types/display_mode.h" +#include "ui/events/devices/device_data_manager.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/size.h" @@ -60,6 +63,13 @@ class DisplayChangeObserverTest : public testing::Test, Test::SetUp(); } + // Pass through method to be called by individual test cases. + ManagedDisplayInfo CreateManagedDisplayInfo(DisplayChangeObserver* observer, + const DisplaySnapshot* snapshot, + const DisplayMode* mode_info) { + return observer->CreateManagedDisplayInfo(snapshot, mode_info); + } + private: base::test::ScopedFeatureList scoped_feature_list_; @@ -175,7 +185,8 @@ TEST_P(DisplayChangeObserverTest, GetEmptyExternalManagedDisplayModeList) { FakeDisplaySnapshot display_snapshot( 123, gfx::Point(), gfx::Size(), DISPLAY_CONNECTION_TYPE_UNKNOWN, false, false, PrivacyScreenState::kNotSupported, false, false, std::string(), {}, - nullptr, nullptr, 0, gfx::Size()); + nullptr, nullptr, 0, gfx::Size(), gfx::ColorSpace(), + /*bits_per_channel=*/8u); ManagedDisplayInfo::ManagedDisplayModeList display_modes = DisplayChangeObserver::GetExternalManagedDisplayModeList( @@ -294,6 +305,127 @@ TEST_P(DisplayChangeObserverTest, } } +TEST_P(DisplayChangeObserverTest, InvalidDisplayColorSpaces) { + const std::unique_ptr<DisplaySnapshot> display_snapshot = + FakeDisplaySnapshot::Builder() + .SetId(123) + .SetName("AmazingFakeDisplay") + .SetNativeMode(MakeDisplayMode(1920, 1080, true, 60)) + .SetColorSpace(gfx::ColorSpace()) + .Build(); + + ui::DeviceDataManager::CreateInstance(); + DisplayManager manager(nullptr); + const auto display_mode = MakeDisplayMode(1920, 1080, true, 60); + DisplayChangeObserver observer(&manager); + const ManagedDisplayInfo display_info = CreateManagedDisplayInfo( + &observer, display_snapshot.get(), display_mode.get()); + + EXPECT_EQ(display_info.bits_per_channel(), 8u); + const auto display_color_spaces = display_info.display_color_spaces(); + EXPECT_FALSE(display_color_spaces.SupportsHDR()); + + EXPECT_EQ( + DisplaySnapshot::PrimaryFormat(), + display_color_spaces.GetOutputBufferFormat(gfx::ContentColorUsage::kSRGB, + /*needs_alpha=*/true)); + + const auto color_space = display_color_spaces.GetRasterColorSpace(); + // DisplayColorSpaces will fix an invalid ColorSpace to return sRGB. + EXPECT_TRUE(color_space.IsValid()); + EXPECT_EQ(color_space, gfx::ColorSpace::CreateSRGB()); +} + +TEST_P(DisplayChangeObserverTest, SDRDisplayColorSpaces) { + const std::unique_ptr<DisplaySnapshot> display_snapshot = + FakeDisplaySnapshot::Builder() + .SetId(123) + .SetName("AmazingFakeDisplay") + .SetNativeMode(MakeDisplayMode(1920, 1080, true, 60)) + .SetColorSpace(gfx::ColorSpace::CreateSRGB()) + .Build(); + + ui::DeviceDataManager::CreateInstance(); + DisplayManager manager(nullptr); + const auto display_mode = MakeDisplayMode(1920, 1080, true, 60); + DisplayChangeObserver observer(&manager); + const ManagedDisplayInfo display_info = CreateManagedDisplayInfo( + &observer, display_snapshot.get(), display_mode.get()); + + EXPECT_EQ(display_info.bits_per_channel(), 8u); + + const auto display_color_spaces = display_info.display_color_spaces(); + EXPECT_FALSE(display_color_spaces.SupportsHDR()); + + EXPECT_EQ( + DisplaySnapshot::PrimaryFormat(), + display_color_spaces.GetOutputBufferFormat(gfx::ContentColorUsage::kSRGB, + /*needs_alpha=*/true)); + + const auto color_space = display_color_spaces.GetRasterColorSpace(); + EXPECT_TRUE(color_space.IsValid()); + EXPECT_EQ(color_space.GetPrimaryID(), gfx::ColorSpace::PrimaryID::BT709); + EXPECT_EQ(color_space.GetTransferID(), + gfx::ColorSpace::TransferID::IEC61966_2_1); +} + +#if defined(OS_CHROMEOS) +TEST_P(DisplayChangeObserverTest, HDRDisplayColorSpaces) { + // TODO(crbug.com/1012846): Remove this flag and provision when HDR is fully + // supported on ChromeOS. + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndEnableFeature(features::kUseHDRTransferFunction); + + const std::unique_ptr<DisplaySnapshot> display_snapshot = + FakeDisplaySnapshot::Builder() + .SetId(123) + .SetName("AmazingFakeDisplay") + .SetNativeMode(MakeDisplayMode(1920, 1080, true, 60)) + .SetColorSpace(gfx::ColorSpace::CreateHDR10(100.0f)) + .SetBitsPerChannel(10u) + .Build(); + + ui::DeviceDataManager::CreateInstance(); + DisplayManager manager(nullptr); + const auto display_mode = MakeDisplayMode(1920, 1080, true, 60); + DisplayChangeObserver observer(&manager); + const ManagedDisplayInfo display_info = CreateManagedDisplayInfo( + &observer, display_snapshot.get(), display_mode.get()); + + EXPECT_EQ(display_info.bits_per_channel(), 10u); + + const auto display_color_spaces = display_info.display_color_spaces(); + EXPECT_TRUE(display_color_spaces.SupportsHDR()); + + // |display_color_spaces| still supports SDR rendering. + EXPECT_EQ( + DisplaySnapshot::PrimaryFormat(), + display_color_spaces.GetOutputBufferFormat(gfx::ContentColorUsage::kSRGB, + /*needs_alpha=*/true)); + + const auto sdr_color_space = + display_color_spaces.GetOutputColorSpace(gfx::ContentColorUsage::kSRGB, + /*needs_alpha=*/true); + EXPECT_TRUE(sdr_color_space.IsValid()); + EXPECT_EQ(sdr_color_space.GetPrimaryID(), gfx::ColorSpace::PrimaryID::BT709); + EXPECT_EQ(sdr_color_space.GetTransferID(), + gfx::ColorSpace::TransferID::IEC61966_2_1); + + EXPECT_EQ( + display_color_spaces.GetOutputBufferFormat(gfx::ContentColorUsage::kHDR, + /*needs_alpha=*/true), + gfx::BufferFormat::RGBA_1010102); + + const auto hdr_color_space = + display_color_spaces.GetOutputColorSpace(gfx::ContentColorUsage::kHDR, + /*needs_alpha=*/true); + EXPECT_TRUE(hdr_color_space.IsValid()); + EXPECT_EQ(hdr_color_space.GetPrimaryID(), gfx::ColorSpace::PrimaryID::BT2020); + EXPECT_EQ(hdr_color_space.GetTransferID(), + gfx::ColorSpace::TransferID::PIECEWISE_HDR); +} +#endif + INSTANTIATE_TEST_SUITE_P(All, DisplayChangeObserverTest, ::testing::Values(false, true)); diff --git a/chromium/ui/display/manager/display_configurator.cc b/chromium/ui/display/manager/display_configurator.cc index 0f078a96d7a..30774956842 100644 --- a/chromium/ui/display/manager/display_configurator.cc +++ b/chromium/ui/display/manager/display_configurator.cc @@ -785,24 +785,26 @@ bool DisplayConfigurator::SetGammaCorrection( bool DisplayConfigurator::IsPrivacyScreenSupportedOnInternalDisplay() const { return current_internal_display_ && - current_internal_display_->privacy_screen_state() != kNotSupported; + current_internal_display_->privacy_screen_state() != kNotSupported && + current_internal_display_->current_mode(); } bool DisplayConfigurator::SetPrivacyScreenOnInternalDisplay(bool enabled) { - if (!current_internal_display_) { - LOG(ERROR) << "This device does not have an internal display."; - return false; + if (IsPrivacyScreenSupportedOnInternalDisplay()) { + native_display_delegate_->SetPrivacyScreen( + current_internal_display_->display_id(), enabled); + return true; } - if (!IsPrivacyScreenSupportedOnInternalDisplay()) { + if (!current_internal_display_) { + LOG(ERROR) << "This device does not have an internal display."; + } else if (current_internal_display_->privacy_screen_state() == + kNotSupported) { LOG(ERROR) << "The internal display of this device does not support " - "privacy screeny."; - return false; + "privacy screen."; } - native_display_delegate_->SetPrivacyScreen( - current_internal_display_->display_id(), enabled); - return true; + return false; } chromeos::DisplayPowerState DisplayConfigurator::GetRequestedPowerState() diff --git a/chromium/ui/display/manager/display_manager.cc b/chromium/ui/display/manager/display_manager.cc index 11423d46aae..7d909dddb79 100644 --- a/chromium/ui/display/manager/display_manager.cc +++ b/chromium/ui/display/manager/display_manager.cc @@ -33,6 +33,7 @@ #include "ui/display/display_observer.h" #include "ui/display/display_switches.h" #include "ui/display/manager/display_layout_store.h" +#include "ui/display/manager/display_util.h" #include "ui/display/manager/managed_display_info.h" #include "ui/display/screen.h" #include "ui/display/types/display_snapshot.h" @@ -47,7 +48,6 @@ #include "chromeos/system/devicemode.h" #include "ui/display/manager/display_change_observer.h" #include "ui/display/manager/display_configurator.h" -#include "ui/display/manager/display_util.h" #include "ui/display/types/native_display_delegate.h" #include "ui/events/devices/touchscreen_device.h" #endif @@ -985,6 +985,16 @@ void DisplayManager::UpdateDisplaysWith( if (current_display.rotation() != new_display.rotation()) metrics |= DisplayObserver::DISPLAY_METRIC_ROTATION; + if (!WithinEpsilon(current_display.display_frequency(), + new_display.display_frequency())) { + metrics |= DisplayObserver::DISPLAY_METRIC_REFRESH_RATE; + } + + if (current_display_info.is_interlaced() != + new_display_info.is_interlaced()) { + metrics |= DisplayObserver::DISPLAY_METRIC_INTERLACED; + } + if (metrics != DisplayObserver::DISPLAY_METRIC_NONE) { display_changes.insert( std::pair<size_t, uint32_t>(new_displays.size(), metrics)); diff --git a/chromium/ui/display/manager/display_manager.h b/chromium/ui/display/manager/display_manager.h index d979f1f4e07..9520879323a 100644 --- a/chromium/ui/display/manager/display_manager.h +++ b/chromium/ui/display/manager/display_manager.h @@ -16,9 +16,9 @@ #include <vector> #include "base/callback.h" +#include "base/check_op.h" #include "base/compiler_specific.h" #include "base/gtest_prod_util.h" -#include "base/logging.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" diff --git a/chromium/ui/display/manager/display_util.cc b/chromium/ui/display/manager/display_util.cc index 310e6293da6..c6b5b32b23a 100644 --- a/chromium/ui/display/manager/display_util.cc +++ b/chromium/ui/display/manager/display_util.cc @@ -62,10 +62,6 @@ constexpr std::array<ZoomListBucketDsf, 6> kZoomListBucketsForDsf{{ {1.f / kDsf_2_666, 0.5f, 0.6f, 0.8f, 0.9f, 1.f, 1.2f, 1.35f, 1.5f}}, }}; -bool WithinEpsilon(float a, float b) { - return std::abs(a - b) < std::numeric_limits<float>::epsilon(); -} - } // namespace #if defined(OS_CHROMEOS) @@ -108,6 +104,10 @@ int GetDisplayPower(const std::vector<DisplaySnapshot*>& displays, #endif // defined(OS_CHROMEOS) +bool WithinEpsilon(float a, float b) { + return std::abs(a - b) < std::numeric_limits<float>::epsilon(); +} + std::string MultipleDisplayStateToString(MultipleDisplayState state) { switch (state) { case MULTIPLE_DISPLAY_STATE_INVALID: diff --git a/chromium/ui/display/manager/display_util.h b/chromium/ui/display/manager/display_util.h index e90f055eeaa..a51c684318d 100644 --- a/chromium/ui/display/manager/display_util.h +++ b/chromium/ui/display/manager/display_util.h @@ -34,6 +34,9 @@ GetDisplayPower(const std::vector<DisplaySnapshot*>& displays, #endif // defined(OS_CHROMEOS) +// Determines whether |a| is within an epsilon of |b|. +bool WithinEpsilon(float a, float b); + // Returns a string describing |state|. std::string MultipleDisplayStateToString(MultipleDisplayState state); diff --git a/chromium/ui/display/manager/managed_display_info.cc b/chromium/ui/display/manager/managed_display_info.cc index e40b18c2cce..60720f12024 100644 --- a/chromium/ui/display/manager/managed_display_info.cc +++ b/chromium/ui/display/manager/managed_display_info.cc @@ -70,6 +70,11 @@ struct ManagedDisplayModeSorter { } }; +bool IsWithinEpsilon(float a, float b) { + constexpr float kEpsilon = 0.0001f; + return std::abs(a - b) < kEpsilon; +} + } // namespace ManagedDisplayMode::ManagedDisplayMode() {} @@ -104,6 +109,13 @@ ManagedDisplayMode::ManagedDisplayMode(const ManagedDisplayMode& other) = ManagedDisplayMode& ManagedDisplayMode::operator=( const ManagedDisplayMode& other) = default; +bool ManagedDisplayMode::operator==(const ManagedDisplayMode& other) const { + return size_ == other.size_ && is_interlaced_ == other.is_interlaced_ && + native_ == other.native_ && + IsWithinEpsilon(refresh_rate_, other.refresh_rate_) && + IsWithinEpsilon(device_scale_factor_, other.device_scale_factor_); +} + gfx::Size ManagedDisplayMode::GetSizeInDIP() const { gfx::SizeF size_dip(size_); size_dip.Scale(1.0f / device_scale_factor_); @@ -114,9 +126,8 @@ bool ManagedDisplayMode::IsEquivalent(const ManagedDisplayMode& other) const { if (display::features::IsListAllDisplayModesEnabled()) return *this == other; - const float kEpsilon = 0.0001f; return size_ == other.size_ && - std::abs(device_scale_factor_ - other.device_scale_factor_) < kEpsilon; + IsWithinEpsilon(device_scale_factor_, other.device_scale_factor_); } std::string ManagedDisplayMode::ToString() const { @@ -208,7 +219,7 @@ ManagedDisplayInfo ManagedDisplayInfo::CreateFromSpecWithID( base::SPLIT_WANT_NONEMPTY); for (size_t i = 0; i < parts.size(); ++i) { gfx::Size size; - float refresh_rate = 0.0f; + float refresh_rate = 60.0f; bool is_interlaced = false; gfx::Rect mode_bounds; diff --git a/chromium/ui/display/manager/managed_display_info.h b/chromium/ui/display/manager/managed_display_info.h index e340223f8e0..f99bf46bbcf 100644 --- a/chromium/ui/display/manager/managed_display_info.h +++ b/chromium/ui/display/manager/managed_display_info.h @@ -40,6 +40,7 @@ class DISPLAY_MANAGER_EXPORT ManagedDisplayMode { ~ManagedDisplayMode(); ManagedDisplayMode(const ManagedDisplayMode& other); ManagedDisplayMode& operator=(const ManagedDisplayMode& other); + bool operator==(const ManagedDisplayMode& other) const; // Returns the size in DIP which is visible to the user. gfx::Size GetSizeInDIP() const; @@ -66,15 +67,6 @@ class DISPLAY_MANAGER_EXPORT ManagedDisplayMode { float device_scale_factor_ = 1.0f; // The device scale factor of the mode. }; -inline bool operator==(const ManagedDisplayMode& lhs, - const ManagedDisplayMode& rhs) { - return lhs.size() == rhs.size() && - lhs.is_interlaced() == rhs.is_interlaced() && - lhs.refresh_rate() == rhs.refresh_rate() && - lhs.native() == rhs.native() && - lhs.device_scale_factor() == rhs.device_scale_factor(); -} - inline bool operator!=(const ManagedDisplayMode& lhs, const ManagedDisplayMode& rhs) { return !(lhs == rhs); diff --git a/chromium/ui/display/manager/managed_display_info_unittest.cc b/chromium/ui/display/manager/managed_display_info_unittest.cc index b73f335bed0..115214dd8be 100644 --- a/chromium/ui/display/manager/managed_display_info_unittest.cc +++ b/chromium/ui/display/manager/managed_display_info_unittest.cc @@ -68,11 +68,11 @@ TEST_F(DisplayInfoTest, CreateFromSpec) { EXPECT_EQ("200x200", info.display_modes()[3].size().ToString()); EXPECT_EQ("300x200", info.display_modes()[4].size().ToString()); - EXPECT_EQ(0.0f, info.display_modes()[0].refresh_rate()); + EXPECT_EQ(60.0f, info.display_modes()[0].refresh_rate()); EXPECT_EQ(60.0f, info.display_modes()[1].refresh_rate()); EXPECT_EQ(30.0f, info.display_modes()[2].refresh_rate()); EXPECT_EQ(59.9f, info.display_modes()[3].refresh_rate()); - EXPECT_EQ(0.0f, info.display_modes()[4].refresh_rate()); + EXPECT_EQ(60.0f, info.display_modes()[4].refresh_rate()); EXPECT_EQ(2.0f, info.display_modes()[0].device_scale_factor()); EXPECT_EQ(1.0f, info.display_modes()[1].device_scale_factor()); diff --git a/chromium/ui/display/manager/touch_device_manager.cc b/chromium/ui/display/manager/touch_device_manager.cc index fc7499a38ca..4b2766bd236 100644 --- a/chromium/ui/display/manager/touch_device_manager.cc +++ b/chromium/ui/display/manager/touch_device_manager.cc @@ -11,6 +11,7 @@ #include "base/files/file_util.h" #include "base/hash/hash.h" +#include "base/logging.h" #include "base/stl_util.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" diff --git a/chromium/ui/display/manager/touch_transform_controller.cc b/chromium/ui/display/manager/touch_transform_controller.cc index 62ce69c4fc5..d2f07a537c6 100644 --- a/chromium/ui/display/manager/touch_transform_controller.cc +++ b/chromium/ui/display/manager/touch_transform_controller.cc @@ -7,6 +7,7 @@ #include <utility> #include <vector> +#include "base/logging.h" #include "third_party/skia/include/core/SkMatrix44.h" #include "ui/display/display_layout.h" #include "ui/display/manager/display_manager.h" diff --git a/chromium/ui/display/manager/update_display_configuration_task.cc b/chromium/ui/display/manager/update_display_configuration_task.cc index 0dd56cd85de..bfee8b7d58e 100644 --- a/chromium/ui/display/manager/update_display_configuration_task.cc +++ b/chromium/ui/display/manager/update_display_configuration_task.cc @@ -5,6 +5,7 @@ #include "ui/display/manager/update_display_configuration_task.h" #include "base/bind.h" +#include "base/logging.h" #include "base/metrics/histogram_functions.h" #include "ui/display/manager/configure_displays_task.h" #include "ui/display/manager/display_layout_manager.h" |