| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/display/chromeos/display_configurator.h" | 5 #include "ui/display/chromeos/display_configurator.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 modes.push_back(small_mode_.Clone()); | 164 modes.push_back(small_mode_.Clone()); |
| 165 modes.push_back(big_mode_.Clone()); | 165 modes.push_back(big_mode_.Clone()); |
| 166 o = &outputs_[1]; | 166 o = &outputs_[1]; |
| 167 o->set_current_mode(modes.back().get()); | 167 o->set_current_mode(modes.back().get()); |
| 168 o->set_native_mode(modes.back().get()); | 168 o->set_native_mode(modes.back().get()); |
| 169 o->set_modes(std::move(modes)); | 169 o->set_modes(std::move(modes)); |
| 170 o->set_type(DISPLAY_CONNECTION_TYPE_HDMI); | 170 o->set_type(DISPLAY_CONNECTION_TYPE_HDMI); |
| 171 o->set_is_aspect_preserving_scaling(true); | 171 o->set_is_aspect_preserving_scaling(true); |
| 172 o->set_display_id(456); | 172 o->set_display_id(456); |
| 173 | 173 |
| 174 modes.clear(); |
| 175 modes.push_back(small_mode_.Clone()); |
| 176 o = &outputs_[2]; |
| 177 o->set_current_mode(modes.back().get()); |
| 178 o->set_native_mode(modes.back().get()); |
| 179 o->set_modes(std::move(modes)); |
| 180 o->set_type(DISPLAY_CONNECTION_TYPE_HDMI); |
| 181 o->set_is_aspect_preserving_scaling(true); |
| 182 o->set_display_id(789); |
| 183 |
| 174 UpdateOutputs(2, false); | 184 UpdateOutputs(2, false); |
| 175 } | 185 } |
| 176 | 186 |
| 177 void OnConfiguredCallback(bool status) { | 187 void OnConfiguredCallback(bool status) { |
| 178 callback_result_ = (status ? CALLBACK_SUCCESS : CALLBACK_FAILURE); | 188 callback_result_ = (status ? CALLBACK_SUCCESS : CALLBACK_FAILURE); |
| 179 } | 189 } |
| 180 | 190 |
| 181 void OnDisplayControlUpdated(bool status) { | 191 void OnDisplayControlUpdated(bool status) { |
| 182 display_control_result_ = (status ? CALLBACK_SUCCESS : CALLBACK_FAILURE); | 192 display_control_result_ = (status ? CALLBACK_SUCCESS : CALLBACK_FAILURE); |
| 183 } | 193 } |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 std::unique_ptr<ActionLogger> log_; | 268 std::unique_ptr<ActionLogger> log_; |
| 259 TestNativeDisplayDelegate* native_display_delegate_; // not owned | 269 TestNativeDisplayDelegate* native_display_delegate_; // not owned |
| 260 DisplayConfigurator::TestApi test_api_; | 270 DisplayConfigurator::TestApi test_api_; |
| 261 | 271 |
| 262 bool enable_content_protection_status_; | 272 bool enable_content_protection_status_; |
| 263 int enable_content_protection_call_count_; | 273 int enable_content_protection_call_count_; |
| 264 DisplayConfigurator::QueryProtectionResponse | 274 DisplayConfigurator::QueryProtectionResponse |
| 265 query_content_protection_response_; | 275 query_content_protection_response_; |
| 266 int query_content_protection_call_count_; | 276 int query_content_protection_call_count_; |
| 267 | 277 |
| 268 TestDisplaySnapshot outputs_[2]; | 278 TestDisplaySnapshot outputs_[3]; |
| 269 | 279 |
| 270 CallbackResult callback_result_; | 280 CallbackResult callback_result_; |
| 271 CallbackResult display_control_result_; | 281 CallbackResult display_control_result_; |
| 272 | 282 |
| 273 private: | 283 private: |
| 274 DISALLOW_COPY_AND_ASSIGN(DisplayConfiguratorTest); | 284 DISALLOW_COPY_AND_ASSIGN(DisplayConfiguratorTest); |
| 275 }; | 285 }; |
| 276 | 286 |
| 277 } // namespace | 287 } // namespace |
| 278 | 288 |
| (...skipping 1551 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1830 .c_str(), | 1840 .c_str(), |
| 1831 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), | 1841 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), |
| 1832 GetCrtcAction(outputs_[1], &big_mode_, | 1842 GetCrtcAction(outputs_[1], &big_mode_, |
| 1833 gfx::Point(0, small_mode_.size().height() + | 1843 gfx::Point(0, small_mode_.size().height() + |
| 1834 DisplayConfigurator::kVerticalGap)) | 1844 DisplayConfigurator::kVerticalGap)) |
| 1835 .c_str(), | 1845 .c_str(), |
| 1836 kUngrab, NULL), | 1846 kUngrab, NULL), |
| 1837 log_->GetActionsAndClear()); | 1847 log_->GetActionsAndClear()); |
| 1838 } | 1848 } |
| 1839 | 1849 |
| 1850 TEST_F(DisplayConfiguratorTest, TestWithThreeDisplays) { |
| 1851 // Start out with two displays in extended mode. |
| 1852 state_controller_.set_state(MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED); |
| 1853 Init(false); |
| 1854 configurator_.ForceInitialConfigure(0); |
| 1855 log_->GetActionsAndClear(); |
| 1856 observer_.Reset(); |
| 1857 |
| 1858 UpdateOutputs(3, true); |
| 1859 state_controller_.set_state(MULTIPLE_DISPLAY_STATE_MULTI_EXTENDED); |
| 1860 |
| 1861 const int kDualHeight = small_mode_.size().height() + |
| 1862 DisplayConfigurator::kVerticalGap + |
| 1863 big_mode_.size().height(); |
| 1864 const int kTripleHeight = 2 * small_mode_.size().height() + |
| 1865 2 * DisplayConfigurator::kVerticalGap + |
| 1866 big_mode_.size().height(); |
| 1867 EXPECT_EQ( |
| 1868 JoinActions( |
| 1869 kGrab, GetFramebufferAction( |
| 1870 gfx::Size(big_mode_.size().width(), kTripleHeight), |
| 1871 &outputs_[0], &outputs_[1]) |
| 1872 .c_str(), |
| 1873 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), |
| 1874 GetCrtcAction(outputs_[1], &big_mode_, |
| 1875 gfx::Point(0, small_mode_.size().height() + |
| 1876 DisplayConfigurator::kVerticalGap)) |
| 1877 .c_str(), |
| 1878 GetCrtcAction( |
| 1879 outputs_[2], &small_mode_, |
| 1880 gfx::Point(0, small_mode_.size().height() + |
| 1881 big_mode_.size().height() + |
| 1882 2 * DisplayConfigurator::kVerticalGap)) |
| 1883 .c_str(), |
| 1884 kUngrab, NULL), |
| 1885 log_->GetActionsAndClear()); |
| 1886 |
| 1887 // Verify that turning the power off works. |
| 1888 configurator_.SetDisplayPower( |
| 1889 chromeos::DISPLAY_POWER_ALL_OFF, |
| 1890 DisplayConfigurator::kSetDisplayPowerNoFlags, |
| 1891 base::Bind(&DisplayConfiguratorTest::OnConfiguredCallback, |
| 1892 base::Unretained(this))); |
| 1893 |
| 1894 EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult()); |
| 1895 EXPECT_EQ( |
| 1896 JoinActions( |
| 1897 kGrab, GetFramebufferAction( |
| 1898 gfx::Size(big_mode_.size().width(), kTripleHeight), |
| 1899 &outputs_[0], &outputs_[1]) |
| 1900 .c_str(), |
| 1901 GetCrtcAction(outputs_[0], nullptr, gfx::Point(0, 0)).c_str(), |
| 1902 GetCrtcAction(outputs_[1], nullptr, |
| 1903 gfx::Point(0, small_mode_.size().height() + |
| 1904 DisplayConfigurator::kVerticalGap)) |
| 1905 .c_str(), |
| 1906 GetCrtcAction( |
| 1907 outputs_[2], nullptr, |
| 1908 gfx::Point(0, small_mode_.size().height() + |
| 1909 big_mode_.size().height() + |
| 1910 2 * DisplayConfigurator::kVerticalGap)) |
| 1911 .c_str(), |
| 1912 kUngrab, NULL), |
| 1913 log_->GetActionsAndClear()); |
| 1914 |
| 1915 configurator_.SetDisplayPower( |
| 1916 chromeos::DISPLAY_POWER_ALL_ON, |
| 1917 DisplayConfigurator::kSetDisplayPowerNoFlags, |
| 1918 base::Bind(&DisplayConfiguratorTest::OnConfiguredCallback, |
| 1919 base::Unretained(this))); |
| 1920 |
| 1921 EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult()); |
| 1922 EXPECT_EQ( |
| 1923 JoinActions( |
| 1924 kGrab, GetFramebufferAction( |
| 1925 gfx::Size(big_mode_.size().width(), kTripleHeight), |
| 1926 &outputs_[0], &outputs_[1]) |
| 1927 .c_str(), |
| 1928 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), |
| 1929 GetCrtcAction(outputs_[1], &big_mode_, |
| 1930 gfx::Point(0, small_mode_.size().height() + |
| 1931 DisplayConfigurator::kVerticalGap)) |
| 1932 .c_str(), |
| 1933 GetCrtcAction( |
| 1934 outputs_[2], &small_mode_, |
| 1935 gfx::Point(0, small_mode_.size().height() + |
| 1936 big_mode_.size().height() + |
| 1937 2 * DisplayConfigurator::kVerticalGap)) |
| 1938 .c_str(), |
| 1939 kForceDPMS, kUngrab, NULL), |
| 1940 log_->GetActionsAndClear()); |
| 1941 |
| 1942 // Disconnect the third output. |
| 1943 observer_.Reset(); |
| 1944 state_controller_.set_state(MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED); |
| 1945 UpdateOutputs(2, true); |
| 1946 EXPECT_EQ( |
| 1947 JoinActions( |
| 1948 kGrab, |
| 1949 GetFramebufferAction(gfx::Size(big_mode_.size().width(), kDualHeight), |
| 1950 &outputs_[0], &outputs_[1]) |
| 1951 .c_str(), |
| 1952 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), |
| 1953 GetCrtcAction(outputs_[1], &big_mode_, |
| 1954 gfx::Point(0, small_mode_.size().height() + |
| 1955 DisplayConfigurator::kVerticalGap)) |
| 1956 .c_str(), |
| 1957 kUngrab, NULL), |
| 1958 log_->GetActionsAndClear()); |
| 1959 } |
| 1960 |
| 1840 } // namespace test | 1961 } // namespace test |
| 1841 } // namespace ui | 1962 } // namespace ui |
| OLD | NEW |