15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_string_value_serializer.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/tools/gdig/file_net_log.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)FileNetLogObserver::FileNetLogObserver(FILE* destination) 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) : destination_(destination) { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(destination != NULL); 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)FileNetLogObserver::~FileNetLogObserver() { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void FileNetLogObserver::OnAddEntry(const net::NetLog::Entry& entry) { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Only BoundNetLogs without a NetLog should have an invalid source. 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(entry.source().IsValid()); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const char* source = NetLog::SourceTypeToString(entry.source().type); 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const char* type = NetLog::EventTypeToString(entry.type()); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::Value> param_value(entry.ParametersToValue()); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string params; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (param_value.get() != NULL) { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JSONStringValueSerializer serializer(¶ms); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ret = serializer.Serialize(*param_value); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(ret); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time now = base::Time::NowFromSystemTime(); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::AutoLock lock(lock_); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (first_event_time_.is_null()) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) first_event_time_ = now; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta elapsed_time = now - first_event_time_; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(destination_ , "%u\t%u\t%s\t%s\t%s\n", 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<unsigned>(elapsed_time.InMilliseconds()), 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry.source().id, source, type, params.c_str()); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 49