mirror of
https://github.com/chromium/crashpad.git
synced 2025-03-10 14:46:07 +00:00
Use BUILDFLAG(IS_*) instead of defined(OS_*). This was generated mostly mechnically by performing the following steps: - sed -i '' -E -e 's/defined\(OS_/BUILDFLAG(IS_/g' \ -e 's%([ !])OS_([A-Z]+)%\1BUILDFLAG(IS_\2)%g' \ $(git grep -l 'OS_' '**/*.c' '**/*.cc' '**/*.h' '**/*.m' '**/*.mm') - sed -i '' -e 's/#ifdef BUILDFLAG(/#if BUILDFLAG(/' \ $(git grep -l '#ifdef BUILDFLAG(' '**/*.c' '**/*.cc' '**/*.h' '**/*.m' '**/*.mm') - gsed -i -z -E -e \ 's%(.*)#include "%\1#include "build/buildflag.h"\n#include "%' \ $(git grep -l 'BUILDFLAG(IS_' '**/*.c' '**/*.cc' '**/*.h' '**/*.m' '**/*.mm') - Spot checks to move #include "build/buildflag.h" to the correct parts of files. - sed -i '' -E -e \ 's%^(#include "build/buildflag.h")$%#include "build/build_config.h"\n\1%' \ $(grep -L '^#include "build/build_config.h"$' $(git grep -l 'BUILDFLAG(IS_' '**/*.c' '**/*.cc' '**/*.h' '**/*.m' '**/*.mm')) - Add “clang-format off” around tool usage messages. - git cl format - Update mini_chromium to 85ba51f98278 (intermediate step). TESTING ONLY). - for f in $(git grep -l '^#include "build/buildflag.h"$' '**/*.c' '**/*.cc' '**/*.h' '**/*.m' '**/*.mm'); do \ grep -v '^#include "build/buildflag.h"$' "${f}" > /tmp/z; \ cp /tmp/z "${f}"; done - git cl format - Update mini_chromium to 735143774c5f (intermediate step). - Update mini_chromium to f41420eb45fa (as checked in). - Update mini_chromium to 6e2f204b4ae1 (as checked in). For ease of review and inspection, each of these steps is uploaded as a new patch set in a review series. This includes an update of mini_chromium to 6e2f204b4ae1: f41420eb45fa Use BUILDFLAG for OS checking 6e2f204b4ae1 Include what you use: string_util.h uses build_config.h Bug: chromium:1234043 Change-Id: Ieef86186f094c64e59b853729737e36982f8cf69 Reviewed-on: https://chromium-review.googlesource.com/c/crashpad/crashpad/+/3400258 Reviewed-by: Joshua Peraza <jperaza@chromium.org> Commit-Queue: Mark Mentovai <mark@chromium.org>
134 lines
4.5 KiB
C++
134 lines
4.5 KiB
C++
// Copyright 2015 The Crashpad Authors. All rights reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#include "util/misc/time.h"
|
|
|
|
#include <limits>
|
|
|
|
#include "build/build_config.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
namespace crashpad {
|
|
namespace test {
|
|
namespace {
|
|
|
|
TEST(Time, TimespecArithmetic) {
|
|
timespec ts1, ts2, result;
|
|
ts1.tv_sec = ts2.tv_sec = 1;
|
|
ts1.tv_nsec = ts2.tv_nsec = kNanosecondsPerSecond / 2;
|
|
AddTimespec(ts1, ts2, &result);
|
|
EXPECT_EQ(result.tv_sec, 3);
|
|
EXPECT_EQ(result.tv_nsec, 0);
|
|
|
|
ts1.tv_sec = 2;
|
|
ts1.tv_nsec = 0;
|
|
ts2.tv_sec = 1;
|
|
ts2.tv_nsec = 1;
|
|
SubtractTimespec(ts1, ts2, &result);
|
|
EXPECT_EQ(result.tv_sec, 0);
|
|
EXPECT_EQ(result.tv_nsec, long{kNanosecondsPerSecond - 1});
|
|
}
|
|
|
|
TEST(Time, TimeConversions) {
|
|
// On July 30th, 2014 at 9:15 PM GMT+0, the Crashpad git repository was born.
|
|
// (nanoseconds are approximate)
|
|
constexpr timespec kCrashpadBirthdate = {
|
|
/* .tv_sec= */ 1406754914,
|
|
/* .tv_nsec= */ 32487
|
|
};
|
|
|
|
timeval timeval_birthdate;
|
|
ASSERT_TRUE(TimespecToTimeval(kCrashpadBirthdate, &timeval_birthdate));
|
|
EXPECT_EQ(timeval_birthdate.tv_sec, kCrashpadBirthdate.tv_sec);
|
|
EXPECT_EQ(timeval_birthdate.tv_usec, kCrashpadBirthdate.tv_nsec / 1000);
|
|
|
|
timespec timespec_birthdate;
|
|
TimevalToTimespec(timeval_birthdate, ×pec_birthdate);
|
|
EXPECT_EQ(timespec_birthdate.tv_sec, kCrashpadBirthdate.tv_sec);
|
|
EXPECT_EQ(timespec_birthdate.tv_nsec,
|
|
kCrashpadBirthdate.tv_nsec - (kCrashpadBirthdate.tv_nsec % 1000));
|
|
|
|
constexpr timespec kEndOfTime = {
|
|
/* .tv_sec= */ std::numeric_limits<decltype(timespec::tv_sec)>::max(),
|
|
/* .tv_nsec= */ 0
|
|
};
|
|
|
|
timeval end_of_timeval;
|
|
if (std::numeric_limits<decltype(timespec::tv_sec)>::max() >
|
|
std::numeric_limits<decltype(timeval::tv_sec)>::max()) {
|
|
EXPECT_FALSE(TimespecToTimeval(kEndOfTime, &end_of_timeval));
|
|
} else {
|
|
EXPECT_TRUE(TimespecToTimeval(kEndOfTime, &end_of_timeval));
|
|
}
|
|
|
|
#if BUILDFLAG(IS_WIN)
|
|
constexpr uint64_t kBirthdateFiletimeIntervals = 130512285140000324;
|
|
FILETIME filetime_birthdate;
|
|
filetime_birthdate.dwLowDateTime = 0xffffffff & kBirthdateFiletimeIntervals;
|
|
filetime_birthdate.dwHighDateTime = kBirthdateFiletimeIntervals >> 32;
|
|
|
|
FILETIME filetime = TimespecToFiletimeEpoch(kCrashpadBirthdate);
|
|
EXPECT_EQ(filetime.dwLowDateTime, filetime_birthdate.dwLowDateTime);
|
|
EXPECT_EQ(filetime.dwHighDateTime, filetime_birthdate.dwHighDateTime);
|
|
|
|
timespec_birthdate = FiletimeToTimespecEpoch(filetime_birthdate);
|
|
EXPECT_EQ(timespec_birthdate.tv_sec, kCrashpadBirthdate.tv_sec);
|
|
EXPECT_EQ(timespec_birthdate.tv_nsec,
|
|
kCrashpadBirthdate.tv_nsec - kCrashpadBirthdate.tv_nsec % 100);
|
|
|
|
timeval_birthdate = FiletimeToTimevalEpoch(filetime_birthdate);
|
|
EXPECT_EQ(timeval_birthdate.tv_sec, kCrashpadBirthdate.tv_sec);
|
|
EXPECT_EQ(timeval_birthdate.tv_usec, kCrashpadBirthdate.tv_nsec / 1000);
|
|
|
|
FILETIME elapsed_filetime;
|
|
elapsed_filetime.dwLowDateTime = 0;
|
|
elapsed_filetime.dwHighDateTime = 0;
|
|
timeval elapsed_timeval = FiletimeToTimevalInterval(elapsed_filetime);
|
|
EXPECT_EQ(elapsed_timeval.tv_sec, 0);
|
|
EXPECT_EQ(elapsed_timeval.tv_usec, 0);
|
|
|
|
elapsed_filetime.dwLowDateTime = 9;
|
|
elapsed_timeval = FiletimeToTimevalInterval(elapsed_filetime);
|
|
EXPECT_EQ(elapsed_timeval.tv_sec, 0);
|
|
EXPECT_EQ(elapsed_timeval.tv_usec, 0);
|
|
|
|
elapsed_filetime.dwLowDateTime = 10;
|
|
elapsed_timeval = FiletimeToTimevalInterval(elapsed_filetime);
|
|
EXPECT_EQ(elapsed_timeval.tv_sec, 0);
|
|
EXPECT_EQ(elapsed_timeval.tv_usec, 1);
|
|
|
|
elapsed_filetime.dwHighDateTime = 1;
|
|
elapsed_filetime.dwLowDateTime = 0;
|
|
elapsed_timeval = FiletimeToTimevalInterval(elapsed_filetime);
|
|
EXPECT_EQ(elapsed_timeval.tv_sec, 429);
|
|
EXPECT_EQ(elapsed_timeval.tv_usec, 496729);
|
|
#endif // BUILDFLAG(IS_WIN)
|
|
}
|
|
|
|
#if BUILDFLAG(IS_WIN)
|
|
|
|
TEST(Time, GetTimeOfDay) {
|
|
timeval t;
|
|
GetTimeOfDay(&t);
|
|
time_t approx_now = time(nullptr);
|
|
EXPECT_GE(approx_now, t.tv_sec);
|
|
EXPECT_LT(approx_now - 100, t.tv_sec);
|
|
}
|
|
|
|
#endif // BUILDFLAG(IS_WIN)
|
|
|
|
} // namespace
|
|
} // namespace test
|
|
} // namespace crashpad
|