// Copyright 2015 The Cobalt Authors. All Rights Reserved.
//
// 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.

#ifndef COBALT_TRACE_EVENT_SCOPED_TRACE_TO_FILE_H_
#define COBALT_TRACE_EVENT_SCOPED_TRACE_TO_FILE_H_

#include "base/files/file_path.h"
#include "base/time/time.h"

namespace cobalt {
namespace trace_event {

// When this object is constructed, it will enable base::trace_event::TraceLog
// (which should NOT already be enabled), thus enabling the recording of all
// TRACE_EVENT annotations.  Finally, when the object is destructed, the output
// will be written to the specified file in JSON format so that it can
// subsequently be analyzed by navigating to "about:tracing" in a Chrome
// browser and then clicking the "Load" button and finally navigating to the
// file that was output.
class ScopedTraceToFile {
 public:
  explicit ScopedTraceToFile(
      const base::FilePath& output_path_relative_to_logs);
  ~ScopedTraceToFile();

  const base::FilePath& absolute_output_path() const {
    return absolute_output_path_;
  }

  // Returns absolute output path from relative filename
  static base::FilePath filepath_to_absolute(
      const base::FilePath& output_path_relative_to_logs);

 private:
  base::FilePath absolute_output_path_;
};

// Helper function to make it easy to start a trace and collect results even
// if the scope is hard to define (for example if it is difficult to quit
// from the application).
// This function will start a trace when it is called, and after the specified
// amount of time has passed, it will stop tracing and output the results to
// the specified file.
void TraceToFileForDuration(const base::FilePath& output_path_relative_to_logs,
                            const base::TimeDelta& duration);

}  // namespace trace_event
}  // namespace cobalt

#endif  // COBALT_TRACE_EVENT_SCOPED_TRACE_TO_FILE_H_
