当前位置: 首页 > news >正文

chromium中的TimeTicks和TimeDelta

TimeTicks vs TimeDelta

base::TimeTicks

  • 表示一个抽象的时间,用于跟踪时间量。
  • 大部分时间都是递增的,TimeTicks可以 “静止”(例如,如果计算机被暂停)。
  • 在内部是以微秒表示,它们不能被转换为人类可读的时间。

base::TimeDelta

  • 代表一个时间长度,内部表示为微秒。

media/filters/video_renderer_algorithm.cc中的代码实例:

const base::TimeTicks end_time = std::min(deadline_max, frame.end_time);


const base::TimeDelta duration =
        end_time - std::max(deadline_min, frame.start_time);
        

定义TimeDelta类型

在chromium中,base::TimeDelta定义在base/time/time.h文件中,在v8子目录中看到还有一个v8/src/base/platform/time.h,所以如果看错了,如果使用FromNanoseconds的函数创建TimeDleta的时候会报错:

// TimeDelta ------------------------------------------------------------------

class V8_BASE_EXPORT TimeDelta final {
 public:
  constexpr TimeDelta() : delta_(0) {}

  // Converts units of time to TimeDeltas.
  static constexpr TimeDelta FromDays(int days) {
    return TimeDelta(days * TimeConstants::kMicrosecondsPerDay);
  }
  static constexpr TimeDelta FromHours(int hours) {
    return TimeDelta(hours * TimeConstants::kMicrosecondsPerHour);
  }
  static constexpr TimeDelta FromMinutes(int minutes) {
    return TimeDelta(minutes * TimeConstants::kMicrosecondsPerMinute);
  }
  static constexpr TimeDelta FromSeconds(int64_t seconds) {
    return TimeDelta(seconds * TimeConstants::kMicrosecondsPerSecond);
  }
  static constexpr TimeDelta FromMilliseconds(int64_t milliseconds) {
    return TimeDelta(milliseconds * TimeConstants::kMicrosecondsPerMillisecond);
  }
  static constexpr TimeDelta FromMicroseconds(int64_t microseconds) {
    return TimeDelta(microseconds);
  }
  static constexpr TimeDelta FromNanoseconds(int64_t nanoseconds) {
    return TimeDelta(nanoseconds / TimeConstants::kNanosecondsPerMicrosecond);
  }

正确的是base/time/time.h,代码如下:

template <typename T>
constexpr TimeDelta Days(T n) {
  return TimeDelta::FromInternalValue(MakeClampedNum(n) *
                                      Time::kMicrosecondsPerDay);
}
template <typename T>
constexpr TimeDelta Hours(T n) {
  return TimeDelta::FromInternalValue(MakeClampedNum(n) *
                                      Time::kMicrosecondsPerHour);
}
template <typename T>
constexpr TimeDelta Minutes(T n) {
  return TimeDelta::FromInternalValue(MakeClampedNum(n) *
                                      Time::kMicrosecondsPerMinute);
}
template <typename T>
constexpr TimeDelta Seconds(T n) {
  return TimeDelta::FromInternalValue(MakeClampedNum(n) *
                                      Time::kMicrosecondsPerSecond);
}
template <typename T>
constexpr TimeDelta Milliseconds(T n) {
  return TimeDelta::FromInternalValue(MakeClampedNum(n) *
                                      Time::kMicrosecondsPerMillisecond);
}
template <typename T>
constexpr TimeDelta Microseconds(T n) {
  return TimeDelta::FromInternalValue(MakeClampedNum(n));
}
template <typename T>
constexpr TimeDelta Nanoseconds(T n) {
  return TimeDelta::FromInternalValue(MakeClampedNum(n) /
                                      Time::kNanosecondsPerMicrosecond);
}

像这样,构造一个base::TimeDelta类型的时间对象:

base::TimeDelta timestamp = base::Nanoseconds(ptsNs);

相关文章:

  • SpringCloud学习(一)
  • 还是 “月饼” 后续,玩转炫彩 “月饼” 之 问题说明(送开发板)
  • 软考高级-系统架构师-操作系统
  • 测试计划包括哪些内容?
  • 淘宝Tmall,拼多多,1688等API接口示例请求,获取页面商品详情等数据
  • vue-cli 组件
  • 从0开始安装虚拟机VMware和安装Linux系统(详细步骤)
  • 2022年第五空间网络安全大赛WriteUp
  • Git操作
  • 15天深度复习JavaWeb的详细笔记(十)——Filter、Listener、Ajax
  • 30.0、C语言——文件操作 (1)
  • 物联网感知安全——你了解多少?
  • Linux【编写一个简单的shell】
  • Python入门到进阶——流程控制
  • 基于Docker的开源端到端开发者平台
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • Asm.js的简单介绍
  • Codepen 每日精选(2018-3-25)
  • JavaScript中的对象个人分享
  • Python语法速览与机器学习开发环境搭建
  • React Transition Group -- Transition 组件
  • Vue官网教程学习过程中值得记录的一些事情
  • web标准化(下)
  • 从tcpdump抓包看TCP/IP协议
  • 聚簇索引和非聚簇索引
  • 驱动程序原理
  • 微信小程序实战练习(仿五洲到家微信版)
  • 携程小程序初体验
  • 移动端解决方案学习记录
  • 最简单的无缝轮播
  • 【云吞铺子】性能抖动剖析(二)
  • zabbix3.2监控linux磁盘IO
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #pragma multi_compile #pragma shader_feature
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (二)c52学习之旅-简单了解单片机
  • (二)fiber的基本认识
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (学习日记)2024.02.29:UCOSIII第二节
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)关于pipe()的详细解析
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • *上位机的定义
  • ./configure,make,make install的作用
  • .NET DataGridView数据绑定说明
  • .NET 服务 ServiceController
  • .Net环境下的缓存技术介绍
  • .NET实现之(自动更新)
  • .NET中使用Protobuffer 实现序列化和反序列化
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • @synthesize和@dynamic分别有什么作用?