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

Side by Side Diff: src/date.h

Issue 358363002: Move platform abstraction to base library (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: updates Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
« src/base/macros.h ('K') | « src/d8.cc ('k') | src/date.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_DATE_H_ 5 #ifndef V8_DATE_H_
6 #define V8_DATE_H_ 6 #define V8_DATE_H_
7 7
8 #include "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/base/platform/platform.h"
9 #include "src/globals.h" 10 #include "src/globals.h"
10 #include "src/platform.h"
11 11
12 12
13 namespace v8 { 13 namespace v8 {
14 namespace internal { 14 namespace internal {
15 15
16 class DateCache { 16 class DateCache {
17 public: 17 public:
18 static const int kMsPerMin = 60 * 1000; 18 static const int kMsPerMin = 60 * 1000;
19 static const int kSecPerDay = 24 * 60 * 60; 19 static const int kSecPerDay = 24 * 60 * 60;
20 static const int64_t kMsPerDay = kSecPerDay * 1000; 20 static const int64_t kMsPerDay = kSecPerDay * 1000;
(...skipping 11 matching lines...) Expand all
32 // before UTC conversion. 32 // before UTC conversion.
33 static const int64_t kMaxTimeBeforeUTCInMs = 33 static const int64_t kMaxTimeBeforeUTCInMs =
34 kMaxTimeInMs + 10 * kMsPerDay; 34 kMaxTimeInMs + 10 * kMsPerDay;
35 35
36 // Sentinel that denotes an invalid local offset. 36 // Sentinel that denotes an invalid local offset.
37 static const int kInvalidLocalOffsetInMs = kMaxInt; 37 static const int kInvalidLocalOffsetInMs = kMaxInt;
38 // Sentinel that denotes an invalid cache stamp. 38 // Sentinel that denotes an invalid cache stamp.
39 // It is an invariant of DateCache that cache stamp is non-negative. 39 // It is an invariant of DateCache that cache stamp is non-negative.
40 static const int kInvalidStamp = -1; 40 static const int kInvalidStamp = -1;
41 41
42 DateCache() : stamp_(0), tz_cache_(OS::CreateTimezoneCache()) { 42 DateCache() : stamp_(0), tz_cache_(base::OS::CreateTimezoneCache()) {
43 ResetDateCache(); 43 ResetDateCache();
44 } 44 }
45 45
46 virtual ~DateCache() { 46 virtual ~DateCache() {
47 OS::DisposeTimezoneCache(tz_cache_); 47 base::OS::DisposeTimezoneCache(tz_cache_);
48 tz_cache_ = NULL; 48 tz_cache_ = NULL;
49 } 49 }
50 50
51 51
52 // Clears cached timezone information and increments the cache stamp. 52 // Clears cached timezone information and increments the cache stamp.
53 void ResetDateCache(); 53 void ResetDateCache();
54 54
55 55
56 // Computes floor(time_ms / kMsPerDay). 56 // Computes floor(time_ms / kMsPerDay).
57 static int DaysFromTime(int64_t time_ms) { 57 static int DaysFromTime(int64_t time_ms) {
(...skipping 28 matching lines...) Expand all
86 local_offset_ms_ = GetLocalOffsetFromOS(); 86 local_offset_ms_ = GetLocalOffsetFromOS();
87 } 87 }
88 return local_offset_ms_; 88 return local_offset_ms_;
89 } 89 }
90 90
91 91
92 const char* LocalTimezone(int64_t time_ms) { 92 const char* LocalTimezone(int64_t time_ms) {
93 if (time_ms < 0 || time_ms > kMaxEpochTimeInMs) { 93 if (time_ms < 0 || time_ms > kMaxEpochTimeInMs) {
94 time_ms = EquivalentTime(time_ms); 94 time_ms = EquivalentTime(time_ms);
95 } 95 }
96 return OS::LocalTimezone(static_cast<double>(time_ms), tz_cache_); 96 return base::OS::LocalTimezone(static_cast<double>(time_ms), tz_cache_);
97 } 97 }
98 98
99 // ECMA 262 - 15.9.5.26 99 // ECMA 262 - 15.9.5.26
100 int TimezoneOffset(int64_t time_ms) { 100 int TimezoneOffset(int64_t time_ms) {
101 int64_t local_ms = ToLocal(time_ms); 101 int64_t local_ms = ToLocal(time_ms);
102 return static_cast<int>((time_ms - local_ms) / kMsPerMin); 102 return static_cast<int>((time_ms - local_ms) / kMsPerMin);
103 } 103 }
104 104
105 // ECMA 262 - 15.9.1.9 105 // ECMA 262 - 15.9.1.9
106 int64_t ToLocal(int64_t time_ms) { 106 int64_t ToLocal(int64_t time_ms) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 // Cache stamp is used for invalidating caches in JSDate. 155 // Cache stamp is used for invalidating caches in JSDate.
156 // We increment the stamp each time when the timezone information changes. 156 // We increment the stamp each time when the timezone information changes.
157 // JSDate objects perform stamp check and invalidate their caches if 157 // JSDate objects perform stamp check and invalidate their caches if
158 // their saved stamp is not equal to the current stamp. 158 // their saved stamp is not equal to the current stamp.
159 Smi* stamp() { return stamp_; } 159 Smi* stamp() { return stamp_; }
160 void* stamp_address() { return &stamp_; } 160 void* stamp_address() { return &stamp_; }
161 161
162 // These functions are virtual so that we can override them when testing. 162 // These functions are virtual so that we can override them when testing.
163 virtual int GetDaylightSavingsOffsetFromOS(int64_t time_sec) { 163 virtual int GetDaylightSavingsOffsetFromOS(int64_t time_sec) {
164 double time_ms = static_cast<double>(time_sec * 1000); 164 double time_ms = static_cast<double>(time_sec * 1000);
165 return static_cast<int>(OS::DaylightSavingsOffset(time_ms, tz_cache_)); 165 return static_cast<int>(
166 base::OS::DaylightSavingsOffset(time_ms, tz_cache_));
166 } 167 }
167 168
168 virtual int GetLocalOffsetFromOS() { 169 virtual int GetLocalOffsetFromOS() {
169 double offset = OS::LocalTimeOffset(tz_cache_); 170 double offset = base::OS::LocalTimeOffset(tz_cache_);
170 ASSERT(offset < kInvalidLocalOffsetInMs); 171 ASSERT(offset < kInvalidLocalOffsetInMs);
171 return static_cast<int>(offset); 172 return static_cast<int>(offset);
172 } 173 }
173 174
174 private: 175 private:
175 // The implementation relies on the fact that no time zones have 176 // The implementation relies on the fact that no time zones have
176 // more than one daylight savings offset change per 19 days. 177 // more than one daylight savings offset change per 19 days.
177 // In Egypt in 2010 they decided to suspend DST during Ramadan. This 178 // In Egypt in 2010 they decided to suspend DST during Ramadan. This
178 // led to a short interval where DST is in effect from September 10 to 179 // led to a short interval where DST is in effect from September 10 to
179 // September 30. 180 // September 30.
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 228
228 int local_offset_ms_; 229 int local_offset_ms_;
229 230
230 // Year/Month/Day cache. 231 // Year/Month/Day cache.
231 bool ymd_valid_; 232 bool ymd_valid_;
232 int ymd_days_; 233 int ymd_days_;
233 int ymd_year_; 234 int ymd_year_;
234 int ymd_month_; 235 int ymd_month_;
235 int ymd_day_; 236 int ymd_day_;
236 237
237 TimezoneCache* tz_cache_; 238 base::TimezoneCache* tz_cache_;
238 }; 239 };
239 240
240 } } // namespace v8::internal 241 } } // namespace v8::internal
241 242
242 #endif 243 #endif
OLDNEW
« src/base/macros.h ('K') | « src/d8.cc ('k') | src/date.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698