// Copyright 2014 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.

#include "platform/TracedValue.h"

#include "base/trace_event/trace_event_argument.h"
#include "wtf/text/StringUTF8Adaptor.h"

namespace blink {

PassOwnPtr<TracedValue> TracedValue::create()
{
    return adoptPtr(new TracedValue());
}

TracedValue::TracedValue()
    : m_tracedValue(new base::trace_event::TracedValue)
{
}

TracedValue::~TracedValue()
{
}

void TracedValue::setInteger(const char* name, int value)
{
    ASSERT(m_tracedValue.get());
    m_tracedValue->SetIntegerWithCopiedName(name, value);
}

void TracedValue::setDouble(const char* name, double value)
{
    ASSERT(m_tracedValue.get());
    m_tracedValue->SetDoubleWithCopiedName(name, value);
}

void TracedValue::setBoolean(const char* name, bool value)
{
    ASSERT(m_tracedValue.get());
    m_tracedValue->SetBooleanWithCopiedName(name, value);
}

void TracedValue::setString(const char* name, const String& value)
{
    ASSERT(m_tracedValue.get());
    StringUTF8Adaptor adaptor(value);
    m_tracedValue->SetStringWithCopiedName(name, adaptor.asStringPiece());
}

void TracedValue::beginDictionary(const char* name)
{
    ASSERT(m_tracedValue.get());
    m_tracedValue->BeginDictionaryWithCopiedName(name);
}

void TracedValue::beginArray(const char* name)
{
    ASSERT(m_tracedValue.get());
    m_tracedValue->BeginArrayWithCopiedName(name);
}

void TracedValue::endDictionary()
{
    ASSERT(m_tracedValue.get());
    m_tracedValue->EndDictionary();
}

void TracedValue::pushInteger(int value)
{
    ASSERT(m_tracedValue.get());
    m_tracedValue->AppendInteger(value);
}

void TracedValue::pushDouble(double value)
{
    ASSERT(m_tracedValue.get());
    m_tracedValue->AppendDouble(value);
}

void TracedValue::pushBoolean(bool value)
{
    ASSERT(m_tracedValue.get());
    m_tracedValue->AppendBoolean(value);
}

void TracedValue::pushString(const String& value)
{
    ASSERT(m_tracedValue.get());
    StringUTF8Adaptor adaptor(value);
    m_tracedValue->AppendString(adaptor.asStringPiece());
}

void TracedValue::beginArray()
{
    ASSERT(m_tracedValue.get());
    m_tracedValue->BeginArray();
}

void TracedValue::beginDictionary()
{
    ASSERT(m_tracedValue.get());
    m_tracedValue->BeginDictionary();
}

void TracedValue::endArray()
{
    ASSERT(m_tracedValue.get());
    m_tracedValue->EndArray();
}

String TracedValue::toString() const
{
    ASSERT(m_tracedValue.get());
    std::string out;
    m_tracedValue->AppendAsTraceFormat(&out);
    return String::fromUTF8(out.c_str());
}

} // namespace blink