| 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 1010 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1021 // instantiated. | 1021 // instantiated. |
| 1022 // - Number of concurrent in-flight Decode() calls per decoder. | 1022 // - Number of concurrent in-flight Decode() calls per decoder. |
| 1023 // - Number of play-throughs. | 1023 // - Number of play-throughs. |
| 1024 // - reset_after_frame_num: see GLRenderingVDAClient ctor. | 1024 // - reset_after_frame_num: see GLRenderingVDAClient ctor. |
| 1025 // - delete_decoder_phase: see GLRenderingVDAClient ctor. | 1025 // - delete_decoder_phase: see GLRenderingVDAClient ctor. |
| 1026 // - whether to test slow rendering by delaying ReusePictureBuffer(). | 1026 // - whether to test slow rendering by delaying ReusePictureBuffer(). |
| 1027 // - whether the video frames are rendered as thumbnails. | 1027 // - whether the video frames are rendered as thumbnails. |
| 1028 class VideoDecodeAcceleratorParamTest | 1028 class VideoDecodeAcceleratorParamTest |
| 1029 : public VideoDecodeAcceleratorTest, | 1029 : public VideoDecodeAcceleratorTest, |
| 1030 public ::testing::WithParamInterface< | 1030 public ::testing::WithParamInterface< |
| 1031 Tuple7<int, int, int, ResetPoint, ClientState, bool, bool> > { | 1031 Tuple<int, int, int, ResetPoint, ClientState, bool, bool> > { |
| 1032 }; | 1032 }; |
| 1033 | 1033 |
| 1034 // Helper so that gtest failures emit a more readable version of the tuple than | 1034 // Helper so that gtest failures emit a more readable version of the tuple than |
| 1035 // its byte representation. | 1035 // its byte representation. |
| 1036 ::std::ostream& operator<<( | 1036 ::std::ostream& operator<<( |
| 1037 ::std::ostream& os, | 1037 ::std::ostream& os, |
| 1038 const Tuple7<int, int, int, ResetPoint, ClientState, bool, bool>& t) { | 1038 const Tuple<int, int, int, ResetPoint, ClientState, bool, bool>& t) { |
| 1039 return os << t.a << ", " << t.b << ", " << t.c << ", " << t.d << ", " << t.e | 1039 return os << get<0>(t) << ", " << get<1>(t) << ", " << get<2>(t) << ", " |
| 1040 << ", " << t.f << ", " << t.g; | 1040 << get<3>(t) << ", " << get<4>(t) << ", " << get<5>(t) << ", " |
| 1041 << get<6>(t); |
| 1041 } | 1042 } |
| 1042 | 1043 |
| 1043 // Wait for |note| to report a state and if it's not |expected_state| then | 1044 // Wait for |note| to report a state and if it's not |expected_state| then |
| 1044 // assert |client| has deleted its decoder. | 1045 // assert |client| has deleted its decoder. |
| 1045 static void AssertWaitForStateOrDeleted( | 1046 static void AssertWaitForStateOrDeleted( |
| 1046 ClientStateNotification<ClientState>* note, | 1047 ClientStateNotification<ClientState>* note, |
| 1047 GLRenderingVDAClient* client, | 1048 GLRenderingVDAClient* client, |
| 1048 ClientState expected_state) { | 1049 ClientState expected_state) { |
| 1049 ClientState state = note->Wait(); | 1050 ClientState state = note->Wait(); |
| 1050 if (state == expected_state) return; | 1051 if (state == expected_state) return; |
| 1051 ASSERT_TRUE(client->decoder_deleted()) | 1052 ASSERT_TRUE(client->decoder_deleted()) |
| 1052 << "Decoder not deleted but Wait() returned " << state | 1053 << "Decoder not deleted but Wait() returned " << state |
| 1053 << ", instead of " << expected_state; | 1054 << ", instead of " << expected_state; |
| 1054 } | 1055 } |
| 1055 | 1056 |
| 1056 // We assert a minimal number of concurrent decoders we expect to succeed. | 1057 // We assert a minimal number of concurrent decoders we expect to succeed. |
| 1057 // Different platforms can support more concurrent decoders, so we don't assert | 1058 // Different platforms can support more concurrent decoders, so we don't assert |
| 1058 // failure above this. | 1059 // failure above this. |
| 1059 enum { kMinSupportedNumConcurrentDecoders = 3 }; | 1060 enum { kMinSupportedNumConcurrentDecoders = 3 }; |
| 1060 | 1061 |
| 1061 // Test the most straightforward case possible: data is decoded from a single | 1062 // Test the most straightforward case possible: data is decoded from a single |
| 1062 // chunk and rendered to the screen. | 1063 // chunk and rendered to the screen. |
| 1063 TEST_P(VideoDecodeAcceleratorParamTest, TestSimpleDecode) { | 1064 TEST_P(VideoDecodeAcceleratorParamTest, TestSimpleDecode) { |
| 1064 size_t num_concurrent_decoders = GetParam().a; | 1065 size_t num_concurrent_decoders = get<0>(GetParam()); |
| 1065 const size_t num_in_flight_decodes = GetParam().b; | 1066 const size_t num_in_flight_decodes = get<1>(GetParam()); |
| 1066 int num_play_throughs = GetParam().c; | 1067 int num_play_throughs = get<2>(GetParam()); |
| 1067 const int reset_point = GetParam().d; | 1068 const int reset_point = get<3>(GetParam()); |
| 1068 const int delete_decoder_state = GetParam().e; | 1069 const int delete_decoder_state = get<4>(GetParam()); |
| 1069 bool test_reuse_delay = GetParam().f; | 1070 bool test_reuse_delay = get<5>(GetParam()); |
| 1070 const bool render_as_thumbnails = GetParam().g; | 1071 const bool render_as_thumbnails = get<6>(GetParam()); |
| 1071 | 1072 |
| 1072 if (test_video_files_.size() > 1) | 1073 if (test_video_files_.size() > 1) |
| 1073 num_concurrent_decoders = test_video_files_.size(); | 1074 num_concurrent_decoders = test_video_files_.size(); |
| 1074 | 1075 |
| 1075 if (g_num_play_throughs > 0) | 1076 if (g_num_play_throughs > 0) |
| 1076 num_play_throughs = g_num_play_throughs; | 1077 num_play_throughs = g_num_play_throughs; |
| 1077 | 1078 |
| 1078 UpdateTestVideoFileParams( | 1079 UpdateTestVideoFileParams( |
| 1079 num_concurrent_decoders, reset_point, &test_video_files_); | 1080 num_concurrent_decoders, reset_point, &test_video_files_); |
| 1080 | 1081 |
| (...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1459 if (it->first == "v" || it->first == "vmodule") | 1460 if (it->first == "v" || it->first == "vmodule") |
| 1460 continue; | 1461 continue; |
| 1461 LOG(FATAL) << "Unexpected switch: " << it->first << ":" << it->second; | 1462 LOG(FATAL) << "Unexpected switch: " << it->first << ":" << it->second; |
| 1462 } | 1463 } |
| 1463 | 1464 |
| 1464 base::ShadowingAtExitManager at_exit_manager; | 1465 base::ShadowingAtExitManager at_exit_manager; |
| 1465 content::RenderingHelper::InitializeOneOff(); | 1466 content::RenderingHelper::InitializeOneOff(); |
| 1466 | 1467 |
| 1467 return RUN_ALL_TESTS(); | 1468 return RUN_ALL_TESTS(); |
| 1468 } | 1469 } |
| OLD | NEW |