Update talk to 55821645.
TEST=try bots
R=mallinath@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/3139004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@5053 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/base/base64.cc b/talk/base/base64.cc
index 7765f10..79b045e 100644
--- a/talk/base/base64.cc
+++ b/talk/base/base64.cc
@@ -20,7 +20,6 @@
#include "talk/base/common.h"
-using std::string;
using std::vector;
namespace talk_base {
@@ -96,7 +95,8 @@
return true;
}
-void Base64::EncodeFromArray(const void* data, size_t len, string* result) {
+void Base64::EncodeFromArray(const void* data, size_t len,
+ std::string* result) {
ASSERT(NULL != result);
result->clear();
result->resize(((len + 2) / 3) * 4);
@@ -190,8 +190,9 @@
}
bool Base64::DecodeFromArray(const char* data, size_t len, DecodeFlags flags,
- string* result, size_t* data_used) {
- return DecodeFromArrayTemplate<string>(data, len, flags, result, data_used);
+ std::string* result, size_t* data_used) {
+ return DecodeFromArrayTemplate<std::string>(
+ data, len, flags, result, data_used);
}
bool Base64::DecodeFromArray(const char* data, size_t len, DecodeFlags flags,
diff --git a/talk/base/logging.h b/talk/base/logging.h
index b563302..49e126b 100644
--- a/talk/base/logging.h
+++ b/talk/base/logging.h
@@ -312,8 +312,10 @@
// The _F version prefixes the message with the current function name.
#if (defined(__GNUC__) && defined(_DEBUG)) || defined(WANT_PRETTY_LOG_F)
#define LOG_F(sev) LOG(sev) << __PRETTY_FUNCTION__ << ": "
+#define LOG_T_F(sev) LOG(sev) << this << ": " << __PRETTY_FUNCTION__ << ": "
#else
#define LOG_F(sev) LOG(sev) << __FUNCTION__ << ": "
+#define LOG_T_F(sev) LOG(sev) << this << ": " << __FUNCTION__ << ": "
#endif
#define LOG_CHECK_LEVEL(sev) \
@@ -331,7 +333,6 @@
.stream()
#define LOG_T(sev) LOG(sev) << this << ": "
-#define LOG_T_F(level) LOG_F(level) << this << ": "
#else // !LOGGING
@@ -354,7 +355,7 @@
.stream()
#define LOG_T(sev) LOG(sev) << this << ": "
-#define LOG_T_F(level) LOG_F(level) << this << " "
+#define LOG_T_F(sev) LOG(sev) << this << ": " << __FUNCTION__ <<
#endif // !LOGGING
#define LOG_ERRNO_EX(sev, err) \
diff --git a/talk/base/physicalsocketserver.cc b/talk/base/physicalsocketserver.cc
index 891330a..58a22fa 100644
--- a/talk/base/physicalsocketserver.cc
+++ b/talk/base/physicalsocketserver.cc
@@ -466,6 +466,10 @@
ASSERT((0 <= value) && (value <= 65536));
*mtu = value;
return 0;
+#elif defined(__native_client__)
+ // Most socket operations, including this, will fail in NaCl's sandbox.
+ error_ = EACCES;
+ return -1;
#endif
}
diff --git a/talk/base/profiler.cc b/talk/base/profiler.cc
index 68bcfe4..4c2aac4 100644
--- a/talk/base/profiler.cc
+++ b/talk/base/profiler.cc
@@ -71,8 +71,7 @@
++start_count_;
}
-void ProfilerEvent::Stop() {
- uint64 stop_time = TimeNanos();
+void ProfilerEvent::Stop(uint64 stop_time) {
--start_count_;
ASSERT(start_count_ >= 0);
if (start_count_ == 0) {
@@ -94,6 +93,10 @@
}
}
+void ProfilerEvent::Stop() {
+ Stop(TimeNanos());
+}
+
double ProfilerEvent::standard_deviation() const {
if (event_count_ <= 1) return 0.0;
return sqrt(sum_of_squared_differences_ / (event_count_ - 1.0));
@@ -105,11 +108,29 @@
}
void Profiler::StartEvent(const std::string& event_name) {
- events_[event_name].Start();
+ lock_.LockShared();
+ EventMap::iterator it = events_.find(event_name);
+ bool needs_insert = (it == events_.end());
+ lock_.UnlockShared();
+
+ if (needs_insert) {
+ // Need an exclusive lock to modify the map.
+ ExclusiveScope scope(&lock_);
+ it = events_.insert(
+ EventMap::value_type(event_name, ProfilerEvent())).first;
+ }
+
+ it->second.Start();
}
void Profiler::StopEvent(const std::string& event_name) {
- events_[event_name].Stop();
+ // Get the time ASAP, then wait for the lock.
+ uint64 stop_time = TimeNanos();
+ SharedScope scope(&lock_);
+ EventMap::iterator it = events_.find(event_name);
+ if (it != events_.end()) {
+ it->second.Stop(stop_time);
+ }
}
void Profiler::ReportToLog(const char* file, int line,
@@ -118,6 +139,9 @@
if (!LogMessage::Loggable(severity_to_use)) {
return;
}
+
+ SharedScope scope(&lock_);
+
{ // Output first line.
LogMessage msg(file, line, severity_to_use);
msg.stream() << "=== Profile report ";
@@ -126,8 +150,8 @@
}
msg.stream() << "===";
}
- typedef std::map<std::string, ProfilerEvent>::const_iterator iterator;
- for (iterator it = events_.begin(); it != events_.end(); ++it) {
+ for (EventMap::const_iterator it = events_.begin();
+ it != events_.end(); ++it) {
if (event_prefix.empty() || it->first.find(event_prefix) == 0) {
LogMessage(file, line, severity_to_use).stream()
<< it->first << " " << it->second;
@@ -143,15 +167,17 @@
}
const ProfilerEvent* Profiler::GetEvent(const std::string& event_name) const {
- std::map<std::string, ProfilerEvent>::const_iterator it =
+ SharedScope scope(&lock_);
+ EventMap::const_iterator it =
events_.find(event_name);
return (it == events_.end()) ? NULL : &it->second;
}
bool Profiler::Clear() {
+ ExclusiveScope scope(&lock_);
bool result = true;
// Clear all events that aren't started.
- std::map<std::string, ProfilerEvent>::iterator it = events_.begin();
+ EventMap::iterator it = events_.begin();
while (it != events_.end()) {
if (it->second.is_started()) {
++it; // Can't clear started events.
diff --git a/talk/base/profiler.h b/talk/base/profiler.h
index 91ad6a5..90c5c72 100644
--- a/talk/base/profiler.h
+++ b/talk/base/profiler.h
@@ -37,7 +37,7 @@
// }
// Another example:
// void StartAsyncProcess() {
-// PROFILE_START("My event");
+// PROFILE_START("My async event");
// DoSomethingAsyncAndThenCall(&Callback);
// }
// void Callback() {
@@ -54,6 +54,7 @@
#include "talk/base/basictypes.h"
#include "talk/base/common.h"
#include "talk/base/logging.h"
+#include "talk/base/sharedexclusivelock.h"
// Profiling could be switched via a build flag, but for now, it's always on.
#define ENABLE_PROFILING
@@ -105,6 +106,7 @@
ProfilerEvent();
void Start();
void Stop();
+ void Stop(uint64 stop_time);
double standard_deviation() const;
double total_time() const { return total_time_; }
double mean() const { return mean_; }
@@ -142,7 +144,9 @@
private:
Profiler() {}
- std::map<std::string, ProfilerEvent> events_;
+ typedef std::map<std::string, ProfilerEvent> EventMap;
+ EventMap events_;
+ mutable SharedExclusiveLock lock_;
DISALLOW_COPY_AND_ASSIGN(Profiler);
};