Changeset 211472 in webkit


Ignore:
Timestamp:
Jan 31, 2017 11:55:44 PM (7 years ago)
Author:
Antti Koivisto
Message:

Teach cache coders to encode time_points
https://bugs.webkit.org/show_bug.cgi?id=167670

Reviewed by Andreas Kling.

Source/WebKit2:

Encode time_point instead of duration.

  • NetworkProcess/cache/NetworkCacheStorage.cpp:

(WebKit::NetworkCache::decodeRecordMetaData):
(WebKit::NetworkCache::Storage::readRecord):
(WebKit::NetworkCache::encodeRecordMetaData):
(WebKit::NetworkCache::Storage::encodeRecord):
(WebKit::NetworkCache::Storage::traverse):

Source/WTF:

  • wtf/persistence/Coders.h:

(WTF::Persistence::Coder<std::chrono::system_clock::time_point>::encode):
(WTF::Persistence::Coder<std::chrono::system_clock::time_point>::decode):

Location:
trunk/Source
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r211469 r211472  
     12017-01-31  Antti Koivisto  <antti@apple.com>
     2
     3        Teach cache coders to encode time_points
     4        https://bugs.webkit.org/show_bug.cgi?id=167670
     5
     6        Reviewed by Andreas Kling.
     7
     8        * wtf/persistence/Coders.h:
     9        (WTF::Persistence::Coder<std::chrono::system_clock::time_point>::encode):
     10        (WTF::Persistence::Coder<std::chrono::system_clock::time_point>::decode):
     11
    1122017-01-31  Joseph Pecoraro  <pecoraro@apple.com>
    213
  • trunk/Source/WTF/wtf/persistence/Coders.h

    r210502 r211472  
    262262};
    263263
     264template<> struct Coder<std::chrono::system_clock::time_point> {
     265    static void encode(Encoder& encoder, const std::chrono::system_clock::time_point& timePoint)
     266    {
     267        encoder << static_cast<int64_t>(timePoint.time_since_epoch().count());
     268    }
     269   
     270    static bool decode(Decoder& decoder, std::chrono::system_clock::time_point& result)
     271    {
     272        int64_t time;
     273        if (!decoder.decode(time))
     274            return false;
     275
     276        result = std::chrono::system_clock::time_point(std::chrono::system_clock::duration(static_cast<std::chrono::system_clock::rep>(time)));
     277        return true;
     278    }
     279};
     280
    264281template<> struct Coder<AtomicString> {
    265282    WTF_EXPORT_PRIVATE static void encode(Encoder&, const AtomicString&);
  • trunk/Source/WebKit2/ChangeLog

    r211470 r211472  
     12017-01-31  Antti Koivisto  <antti@apple.com>
     2
     3        Teach cache coders to encode time_points
     4        https://bugs.webkit.org/show_bug.cgi?id=167670
     5
     6        Reviewed by Andreas Kling.
     7
     8        Encode time_point instead of duration.
     9
     10        * NetworkProcess/cache/NetworkCacheStorage.cpp:
     11        (WebKit::NetworkCache::decodeRecordMetaData):
     12        (WebKit::NetworkCache::Storage::readRecord):
     13        (WebKit::NetworkCache::encodeRecordMetaData):
     14        (WebKit::NetworkCache::Storage::encodeRecord):
     15        (WebKit::NetworkCache::Storage::traverse):
     16
    1172017-01-31  Brent Fulgham  <bfulgham@apple.com>
    218
  • trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp

    r210835 r211472  
    365365    unsigned cacheStorageVersion;
    366366    Key key;
    367     // FIXME: Add encoder/decoder for time_point.
    368     std::chrono::milliseconds epochRelativeTimeStamp;
     367    std::chrono::system_clock::time_point timeStamp;
    369368    SHA1::Digest headerHash;
    370369    uint64_t headerSize;
     
    386385        if (!decoder.decode(metaData.key))
    387386            return false;
    388         if (!decoder.decode(metaData.epochRelativeTimeStamp))
     387        if (!decoder.decode(metaData.timeStamp))
    389388            return false;
    390389        if (!decoder.decode(metaData.headerHash))
     
    440439
    441440    // Sanity check against time stamps in future.
    442     auto timeStamp = std::chrono::system_clock::time_point(metaData.epochRelativeTimeStamp);
    443     if (timeStamp > std::chrono::system_clock::now())
     441    if (metaData.timeStamp > std::chrono::system_clock::now())
    444442        return;
    445443
     
    457455    readOperation.resultRecord = std::make_unique<Storage::Record>(Storage::Record {
    458456        metaData.key,
    459         timeStamp,
     457        metaData.timeStamp,
    460458        headerData,
    461459        bodyData,
     
    470468    encoder << metaData.cacheStorageVersion;
    471469    encoder << metaData.key;
    472     encoder << metaData.epochRelativeTimeStamp;
     470    encoder << metaData.timeStamp;
    473471    encoder << metaData.headerHash;
    474472    encoder << metaData.headerSize;
     
    512510
    513511    RecordMetaData metaData(record.key);
    514     metaData.epochRelativeTimeStamp = std::chrono::duration_cast<std::chrono::milliseconds>(record.timeStamp.time_since_epoch());
     512    metaData.timeStamp = record.timeStamp;
    515513    metaData.headerHash = computeSHA1(record.header, m_salt);
    516514    metaData.headerSize = record.header.size();
     
    837835                    Record record {
    838836                        metaData.key,
    839                         std::chrono::system_clock::time_point(metaData.epochRelativeTimeStamp),
     837                        metaData.timeStamp,
    840838                        headerData,
    841839                        { },
Note: See TracChangeset for help on using the changeset viewer.