Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Unified Diff: src/base/platform/platform-win32.cc

Issue 2731463003: [date] Refactor TimezoneCache to be separate from the OS (Closed)
Patch Set: Properly reference windows function Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/base/platform/platform-solaris.cc ('k') | src/base/timezone-cache.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/base/platform/platform-win32.cc
diff --git a/src/base/platform/platform-win32.cc b/src/base/platform/platform-win32.cc
index 60b60fdcd298723fa7e8adfdec69e54300ad1402..33064dafa46e0a3c821eb7f5cc59c4961eebd180 100644
--- a/src/base/platform/platform-win32.cc
+++ b/src/base/platform/platform-win32.cc
@@ -24,9 +24,9 @@
#include "src/base/macros.h"
#include "src/base/platform/platform.h"
#include "src/base/platform/time.h"
+#include "src/base/timezone-cache.h"
#include "src/base/utils/random-number-generator.h"
-
// Extra functions for MinGW. Most of these are the _s functions which are in
// the Microsoft Visual Studio C++ CRT.
#ifdef __MINGW32__
@@ -101,13 +101,19 @@ bool g_hard_abort = false;
} // namespace
-class TimezoneCache {
+class WindowsTimezoneCache : public TimezoneCache {
public:
- TimezoneCache() : initialized_(false) { }
+ WindowsTimezoneCache() : initialized_(false) {}
- void Clear() {
- initialized_ = false;
- }
+ ~WindowsTimezoneCache() override {}
+
+ void Clear() override { initialized_ = false; }
+
+ const char* LocalTimezone(double time) override;
+
+ double LocalTimeOffset() override;
+
+ double DaylightSavingsOffset(double time) override;
// Initialize timezone information. The timezone information is obtained from
// windows. If we cannot get the timezone information we fall back to CET.
@@ -216,14 +222,14 @@ class Win32Time {
// LocalOffset(CET) = 3600000 and LocalOffset(PST) = -28800000. This
// routine also takes into account whether daylight saving is effect
// at the time.
- int64_t LocalOffset(TimezoneCache* cache);
+ int64_t LocalOffset(WindowsTimezoneCache* cache);
// Returns the daylight savings time offset for the time in milliseconds.
- int64_t DaylightSavingsOffset(TimezoneCache* cache);
+ int64_t DaylightSavingsOffset(WindowsTimezoneCache* cache);
// Returns a string identifying the current timezone for the
// timestamp taking into account daylight saving.
- char* LocalTimezone(TimezoneCache* cache);
+ char* LocalTimezone(WindowsTimezoneCache* cache);
private:
// Constants for time conversion.
@@ -235,7 +241,7 @@ class Win32Time {
static const bool kShortTzNames = false;
// Return whether or not daylight savings time is in effect at this time.
- bool InDST(TimezoneCache* cache);
+ bool InDST(WindowsTimezoneCache* cache);
// Accessor for FILETIME representation.
FILETIME& ft() { return time_.ft_; }
@@ -350,7 +356,7 @@ void Win32Time::SetToCurrentTime() {
// Only times in the 32-bit Unix range may be passed to this function.
// Also, adding the time-zone offset to the input must not overflow.
// The function EquivalentTime() in date.js guarantees this.
-int64_t Win32Time::LocalOffset(TimezoneCache* cache) {
+int64_t Win32Time::LocalOffset(WindowsTimezoneCache* cache) {
cache->InitializeIfNeeded();
Win32Time rounded_to_second(*this);
@@ -384,7 +390,7 @@ int64_t Win32Time::LocalOffset(TimezoneCache* cache) {
// Return whether or not daylight savings time is in effect at this time.
-bool Win32Time::InDST(TimezoneCache* cache) {
+bool Win32Time::InDST(WindowsTimezoneCache* cache) {
cache->InitializeIfNeeded();
// Determine if DST is in effect at the specified time.
@@ -409,14 +415,14 @@ bool Win32Time::InDST(TimezoneCache* cache) {
// Return the daylight savings time offset for this time.
-int64_t Win32Time::DaylightSavingsOffset(TimezoneCache* cache) {
+int64_t Win32Time::DaylightSavingsOffset(WindowsTimezoneCache* cache) {
return InDST(cache) ? 60 * kMsPerMinute : 0;
}
// Returns a string identifying the current timezone for the
// timestamp taking into account daylight saving.
-char* Win32Time::LocalTimezone(TimezoneCache* cache) {
+char* Win32Time::LocalTimezone(WindowsTimezoneCache* cache) {
// Return the standard or DST time zone name based on whether daylight
// saving is in effect at the given time.
return InDST(cache) ? cache->dst_tz_name_ : cache->std_tz_name_;
@@ -448,47 +454,30 @@ double OS::TimeCurrentMillis() {
return Time::Now().ToJsTime();
}
-
-TimezoneCache* OS::CreateTimezoneCache() {
- return new TimezoneCache();
-}
-
-
-void OS::DisposeTimezoneCache(TimezoneCache* cache) {
- delete cache;
-}
-
-
-void OS::ClearTimezoneCache(TimezoneCache* cache) {
- cache->Clear();
-}
-
-
// Returns a string identifying the current timezone taking into
// account daylight saving.
-const char* OS::LocalTimezone(double time, TimezoneCache* cache) {
- return Win32Time(time).LocalTimezone(cache);
+const char* WindowsTimezoneCache::LocalTimezone(double time) {
+ return Win32Time(time).LocalTimezone(this);
}
-
// Returns the local time offset in milliseconds east of UTC without
// taking daylight savings time into account.
-double OS::LocalTimeOffset(TimezoneCache* cache) {
+double WindowsTimezoneCache::LocalTimeOffset() {
// Use current time, rounded to the millisecond.
- Win32Time t(TimeCurrentMillis());
+ Win32Time t(OS::TimeCurrentMillis());
// Time::LocalOffset inlcudes any daylight savings offset, so subtract it.
- return static_cast<double>(t.LocalOffset(cache) -
- t.DaylightSavingsOffset(cache));
+ return static_cast<double>(t.LocalOffset(this) -
+ t.DaylightSavingsOffset(this));
}
-
// Returns the daylight savings offset in milliseconds for the given
// time.
-double OS::DaylightSavingsOffset(double time, TimezoneCache* cache) {
- int64_t offset = Win32Time(time).DaylightSavingsOffset(cache);
+double WindowsTimezoneCache::DaylightSavingsOffset(double time) {
+ int64_t offset = Win32Time(time).DaylightSavingsOffset(this);
return static_cast<double>(offset);
}
+TimezoneCache* OS::CreateTimezoneCache() { return new WindowsTimezoneCache(); }
int OS::GetLastError() {
return ::GetLastError();
« no previous file with comments | « src/base/platform/platform-solaris.cc ('k') | src/base/timezone-cache.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698