|  | // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef REMOTING_CODEC_CODEC_TEST_H_ | 
|  | #define REMOTING_CODEC_CODEC_TEST_H_ | 
|  |  | 
|  | #include <list> | 
|  |  | 
|  | #include "base/memory/ref_counted.h" | 
|  |  | 
|  | namespace webrtc { | 
|  | class DesktopFrame; | 
|  | class DesktopSize; | 
|  | } | 
|  |  | 
|  | namespace remoting { | 
|  |  | 
|  | class VideoDecoder; | 
|  | class VideoEncoder; | 
|  |  | 
|  | // Generate test data and test the encoder for a regular encoding sequence. | 
|  | // This will test encoder test and the sequence of messages sent. | 
|  | // | 
|  | // If |strict| is set to true then this routine will make sure the updated | 
|  | // rects match dirty rects. | 
|  | void TestVideoEncoder(VideoEncoder* encoder, bool strict); | 
|  |  | 
|  | // Generate test data and test the encoder for a sequence of one "changed" | 
|  | // frame followed by one or more "unchanged" frames, and verify that the | 
|  | // encoder sends up to |max_topoff_frames| of non-empty data for unchanged | 
|  | // frames, after which it returns null frames. | 
|  | void TestVideoEncoderEmptyFrames(VideoEncoder* encoder, int max_topoff_frames); | 
|  |  | 
|  | // Generate test data and test the encoder and decoder pair. | 
|  | // | 
|  | // If |strict| is set to true, this routine will make sure the updated rects | 
|  | // are correct. | 
|  | void TestVideoEncoderDecoder(VideoEncoder* encoder, | 
|  | VideoDecoder* decoder, | 
|  | bool strict); | 
|  |  | 
|  | // Generate a frame containing a gradient, and test the encoder and decoder | 
|  | // pair. | 
|  | void TestVideoEncoderDecoderGradient(VideoEncoder* encoder, | 
|  | VideoDecoder* decoder, | 
|  | const webrtc::DesktopSize& screen_size, | 
|  | double max_error_limit, | 
|  | double mean_error_limit); | 
|  |  | 
|  | // Run sufficient encoding iterations to measure the FPS of the specified | 
|  | // encoder. The caller may supply one or more DesktopFrames to encode, which | 
|  | // will be cycled through until timing is complete. If the caller does not | 
|  | // supply any frames then a single full-frame of randomized pixels is used. | 
|  | float MeasureVideoEncoderFpsWithSize(VideoEncoder* encoder, | 
|  | const webrtc::DesktopSize& size); | 
|  | float MeasureVideoEncoderFpsWithFrames( | 
|  | VideoEncoder* encoder, | 
|  | const std::list<webrtc::DesktopFrame*>& frames); | 
|  |  | 
|  | }  // namespace remoting | 
|  |  | 
|  | #endif  // REMOTING_CODEC_CODEC_TEST_H_ |