• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include <stdio.h>
6 
7 #include "base/json/json_string_value_serializer.h"
8 #include "base/logging.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/values.h"
11 #include "net/tools/gdig/file_net_log.h"
12 
13 namespace net {
14 
FileNetLogObserver(FILE * destination)15 FileNetLogObserver::FileNetLogObserver(FILE* destination)
16     : destination_(destination) {
17   DCHECK(destination != NULL);
18 }
19 
~FileNetLogObserver()20 FileNetLogObserver::~FileNetLogObserver() {
21 }
22 
OnAddEntry(const net::NetLog::Entry & entry)23 void FileNetLogObserver::OnAddEntry(const net::NetLog::Entry& entry) {
24   // Only BoundNetLogs without a NetLog should have an invalid source.
25   DCHECK(entry.source().IsValid());
26 
27   const char* source = NetLog::SourceTypeToString(entry.source().type);
28   const char* type = NetLog::EventTypeToString(entry.type());
29 
30   scoped_ptr<base::Value> param_value(entry.ParametersToValue());
31   std::string params;
32   if (param_value.get() != NULL) {
33     JSONStringValueSerializer serializer(&params);
34     bool ret = serializer.Serialize(*param_value);
35     DCHECK(ret);
36   }
37   base::Time now = base::Time::NowFromSystemTime();
38   base::AutoLock lock(lock_);
39   if (first_event_time_.is_null()) {
40     first_event_time_ = now;
41   }
42   base::TimeDelta elapsed_time = now - first_event_time_;
43   fprintf(destination_ , "%u\t%u\t%s\t%s\t%s\n",
44           static_cast<unsigned>(elapsed_time.InMilliseconds()),
45           entry.source().id, source, type, params.c_str());
46 }
47 
48 }  // namespace net
49