| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // The bulk of this file is support code; sorry about that. Here's an overview | 5 // The bulk of this file is support code; sorry about that. Here's an overview |
| 6 // to hopefully help readers of this code: | 6 // to hopefully help readers of this code: |
| 7 // - RenderingHelper is charged with interacting with X11/{EGL/GLES2,GLX/GL} or | 7 // - RenderingHelper is charged with interacting with X11/{EGL/GLES2,GLX/GL} or |
| 8 // Win/EGL. | 8 // Win/EGL. |
| 9 // - ClientState is an enum for the state of the decode client used by the test. | 9 // - ClientState is an enum for the state of the decode client used by the test. |
| 10 // - ClientStateNotification is a barrier abstraction that allows the test code | 10 // - ClientStateNotification is a barrier abstraction that allows the test code |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 #if defined(USE_OZONE) | 75 #if defined(USE_OZONE) |
| 76 #include "ui/ozone/public/ozone_gpu_test_helper.h" | 76 #include "ui/ozone/public/ozone_gpu_test_helper.h" |
| 77 #include "ui/ozone/public/ozone_platform.h" | 77 #include "ui/ozone/public/ozone_platform.h" |
| 78 #endif // defined(USE_OZONE) | 78 #endif // defined(USE_OZONE) |
| 79 | 79 |
| 80 using media::VideoDecodeAccelerator; | 80 using media::VideoDecodeAccelerator; |
| 81 | 81 |
| 82 namespace content { | 82 namespace content { |
| 83 namespace { | 83 namespace { |
| 84 | 84 |
| 85 using base::MakeTuple; |
| 86 |
| 85 // Values optionally filled in from flags; see main() below. | 87 // Values optionally filled in from flags; see main() below. |
| 86 // The syntax of multiple test videos is: | 88 // The syntax of multiple test videos is: |
| 87 // test-video1;test-video2;test-video3 | 89 // test-video1;test-video2;test-video3 |
| 88 // where only the first video is required and other optional videos would be | 90 // where only the first video is required and other optional videos would be |
| 89 // decoded by concurrent decoders. | 91 // decoded by concurrent decoders. |
| 90 // The syntax of each test-video is: | 92 // The syntax of each test-video is: |
| 91 // filename:width:height:numframes:numfragments:minFPSwithRender:minFPSnoRender | 93 // filename:width:height:numframes:numfragments:minFPSwithRender:minFPSnoRender |
| 92 // where only the first field is required. Value details: | 94 // where only the first field is required. Value details: |
| 93 // - |filename| must be an h264 Annex B (NAL) stream or an IVF VP8/9 stream. | 95 // - |filename| must be an h264 Annex B (NAL) stream or an IVF VP8/9 stream. |
| 94 // - |width| and |height| are in pixels. | 96 // - |width| and |height| are in pixels. |
| (...skipping 1075 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1170 // instantiated. | 1172 // instantiated. |
| 1171 // - Number of concurrent in-flight Decode() calls per decoder. | 1173 // - Number of concurrent in-flight Decode() calls per decoder. |
| 1172 // - Number of play-throughs. | 1174 // - Number of play-throughs. |
| 1173 // - reset_after_frame_num: see GLRenderingVDAClient ctor. | 1175 // - reset_after_frame_num: see GLRenderingVDAClient ctor. |
| 1174 // - delete_decoder_phase: see GLRenderingVDAClient ctor. | 1176 // - delete_decoder_phase: see GLRenderingVDAClient ctor. |
| 1175 // - whether to test slow rendering by delaying ReusePictureBuffer(). | 1177 // - whether to test slow rendering by delaying ReusePictureBuffer(). |
| 1176 // - whether the video frames are rendered as thumbnails. | 1178 // - whether the video frames are rendered as thumbnails. |
| 1177 class VideoDecodeAcceleratorParamTest | 1179 class VideoDecodeAcceleratorParamTest |
| 1178 : public VideoDecodeAcceleratorTest, | 1180 : public VideoDecodeAcceleratorTest, |
| 1179 public ::testing::WithParamInterface< | 1181 public ::testing::WithParamInterface< |
| 1180 Tuple<int, int, int, ResetPoint, ClientState, bool, bool> > { | 1182 base::Tuple<int, int, int, ResetPoint, ClientState, bool, bool> > { |
| 1181 }; | 1183 }; |
| 1182 | 1184 |
| 1183 // Helper so that gtest failures emit a more readable version of the tuple than | 1185 // Helper so that gtest failures emit a more readable version of the tuple than |
| 1184 // its byte representation. | 1186 // its byte representation. |
| 1185 ::std::ostream& operator<<( | 1187 ::std::ostream& operator<<( |
| 1186 ::std::ostream& os, | 1188 ::std::ostream& os, |
| 1187 const Tuple<int, int, int, ResetPoint, ClientState, bool, bool>& t) { | 1189 const base::Tuple<int, int, int, ResetPoint, ClientState, bool, bool>& t) { |
| 1188 return os << get<0>(t) << ", " << get<1>(t) << ", " << get<2>(t) << ", " | 1190 return os << base::get<0>(t) << ", " << base::get<1>(t) << ", " |
| 1189 << get<3>(t) << ", " << get<4>(t) << ", " << get<5>(t) << ", " | 1191 << base::get<2>(t) << ", " << base::get<3>(t) << ", " |
| 1190 << get<6>(t); | 1192 << base::get<4>(t) << ", " << base::get<5>(t) << ", " |
| 1193 << base::get<6>(t); |
| 1191 } | 1194 } |
| 1192 | 1195 |
| 1193 // Wait for |note| to report a state and if it's not |expected_state| then | 1196 // Wait for |note| to report a state and if it's not |expected_state| then |
| 1194 // assert |client| has deleted its decoder. | 1197 // assert |client| has deleted its decoder. |
| 1195 static void AssertWaitForStateOrDeleted( | 1198 static void AssertWaitForStateOrDeleted( |
| 1196 ClientStateNotification<ClientState>* note, | 1199 ClientStateNotification<ClientState>* note, |
| 1197 GLRenderingVDAClient* client, | 1200 GLRenderingVDAClient* client, |
| 1198 ClientState expected_state) { | 1201 ClientState expected_state) { |
| 1199 ClientState state = note->Wait(); | 1202 ClientState state = note->Wait(); |
| 1200 if (state == expected_state) return; | 1203 if (state == expected_state) return; |
| 1201 ASSERT_TRUE(client->decoder_deleted()) | 1204 ASSERT_TRUE(client->decoder_deleted()) |
| 1202 << "Decoder not deleted but Wait() returned " << state | 1205 << "Decoder not deleted but Wait() returned " << state |
| 1203 << ", instead of " << expected_state; | 1206 << ", instead of " << expected_state; |
| 1204 } | 1207 } |
| 1205 | 1208 |
| 1206 // We assert a minimal number of concurrent decoders we expect to succeed. | 1209 // We assert a minimal number of concurrent decoders we expect to succeed. |
| 1207 // Different platforms can support more concurrent decoders, so we don't assert | 1210 // Different platforms can support more concurrent decoders, so we don't assert |
| 1208 // failure above this. | 1211 // failure above this. |
| 1209 enum { kMinSupportedNumConcurrentDecoders = 3 }; | 1212 enum { kMinSupportedNumConcurrentDecoders = 3 }; |
| 1210 | 1213 |
| 1211 // Test the most straightforward case possible: data is decoded from a single | 1214 // Test the most straightforward case possible: data is decoded from a single |
| 1212 // chunk and rendered to the screen. | 1215 // chunk and rendered to the screen. |
| 1213 TEST_P(VideoDecodeAcceleratorParamTest, TestSimpleDecode) { | 1216 TEST_P(VideoDecodeAcceleratorParamTest, TestSimpleDecode) { |
| 1214 size_t num_concurrent_decoders = get<0>(GetParam()); | 1217 size_t num_concurrent_decoders = base::get<0>(GetParam()); |
| 1215 const size_t num_in_flight_decodes = get<1>(GetParam()); | 1218 const size_t num_in_flight_decodes = base::get<1>(GetParam()); |
| 1216 int num_play_throughs = get<2>(GetParam()); | 1219 int num_play_throughs = base::get<2>(GetParam()); |
| 1217 const int reset_point = get<3>(GetParam()); | 1220 const int reset_point = base::get<3>(GetParam()); |
| 1218 const int delete_decoder_state = get<4>(GetParam()); | 1221 const int delete_decoder_state = base::get<4>(GetParam()); |
| 1219 bool test_reuse_delay = get<5>(GetParam()); | 1222 bool test_reuse_delay = base::get<5>(GetParam()); |
| 1220 const bool render_as_thumbnails = get<6>(GetParam()); | 1223 const bool render_as_thumbnails = base::get<6>(GetParam()); |
| 1221 | 1224 |
| 1222 if (test_video_files_.size() > 1) | 1225 if (test_video_files_.size() > 1) |
| 1223 num_concurrent_decoders = test_video_files_.size(); | 1226 num_concurrent_decoders = test_video_files_.size(); |
| 1224 | 1227 |
| 1225 if (g_num_play_throughs > 0) | 1228 if (g_num_play_throughs > 0) |
| 1226 num_play_throughs = g_num_play_throughs; | 1229 num_play_throughs = g_num_play_throughs; |
| 1227 | 1230 |
| 1228 UpdateTestVideoFileParams( | 1231 UpdateTestVideoFileParams( |
| 1229 num_concurrent_decoders, reset_point, &test_video_files_); | 1232 num_concurrent_decoders, reset_point, &test_video_files_); |
| 1230 | 1233 |
| (...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1637 content::VaapiWrapper::PreSandboxInitialization(); | 1640 content::VaapiWrapper::PreSandboxInitialization(); |
| 1638 #endif | 1641 #endif |
| 1639 | 1642 |
| 1640 content::g_env = | 1643 content::g_env = |
| 1641 reinterpret_cast<content::VideoDecodeAcceleratorTestEnvironment*>( | 1644 reinterpret_cast<content::VideoDecodeAcceleratorTestEnvironment*>( |
| 1642 testing::AddGlobalTestEnvironment( | 1645 testing::AddGlobalTestEnvironment( |
| 1643 new content::VideoDecodeAcceleratorTestEnvironment())); | 1646 new content::VideoDecodeAcceleratorTestEnvironment())); |
| 1644 | 1647 |
| 1645 return RUN_ALL_TESTS(); | 1648 return RUN_ALL_TESTS(); |
| 1646 } | 1649 } |
| OLD | NEW |