/*
 * Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.test;

import android.os.PerformanceCollector;
import android.os.PerformanceCollector.PerformanceResultsWriter;

/**
 * A simple interface for passing in a PerformanceResultsWriter instance to be used with
 * PerformanceCollector.
 * <p/>
 * A one line implementation of {@link #setPerformanceResultsWriter(PerformanceResultsWriter)}
 * is sufficient in most cases:
 * <p/>
 * <code>mPerfCollector.setPerformanceResultsWriter(writer);</code>
 *
 * {@hide} Not needed for SDK.
 */
public interface PerformanceCollectorTestCase {
    public PerformanceCollector mPerfCollector = new PerformanceCollector();

    public void setPerformanceResultsWriter(PerformanceResultsWriter writer);
}
