网页光栅化_光栅净化

网页光栅化_光栅净化资料:https://blog.csdn.net/luoshengyang/article/details/51348829总结来说,分块的光栅化过程包含了以下三个主要的步骤:1.根据分块的可见性,将它们划分到不同的Bin中。2.根据内存限制策略,从优先级较高的Bin中选集出需要光栅化的分块。3.为每一个需要光栅化的分块分配光栅化内存…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

资料:https://blog.csdn.net/luoshengyang/article/details/51348829

总结来说,分块的光栅化过程包含了以下三个主要的步骤:

       1. 根据分块的可见性,将它们划分到不同的Bin中。

       2. 根据内存限制策略,从优先级较高的Bin中选集出需要光栅化的分块。

       3. 为每一个需要光栅化的分块分配光栅化内存,并且分别为它们创建光栅化任务。

       光栅化任务的执行过程又主要分为以下两个步骤:

       1. 创建画布。画布以前面分配的光栅化内存为后端存储。

       2. 调用画布提供的绘制接口执行以前记录的绘制命令。这些绘制命令就作用在前面分配的光栅化内存中。也就是前面分配的光栅化内存保存了分块的光栅化结果。

       当所有标记为Acquired For Activation的分块都光栅化完成之后,就会触发一个ACTION_ACTIVATE_PENDING_TREE操作,也就是将CC Pending Layer Tree激活为CC Active Layer Tree。

 

创建光栅化线程:

void SchedulerWorkerPoolImpl::Start(
    const SchedulerWorkerPoolParams& params,
    int max_background_tasks,
    scoped_refptr<TaskRunner> service_thread_task_runner,
    SchedulerWorkerObserver* scheduler_worker_observer,
    WorkerEnvironment worker_environment) {
  AutoSchedulerLock auto_lock(lock_);

  DCHECK(workers_.empty());

  ...

  for (int index = 0; index < num_initial_workers; ++index) {
    SchedulerWorker* worker =
        CreateRegisterAndStartSchedulerWorkerLockRequired();

    // CHECK that the first worker can be started (assume that failure means
    // that threads can't be created on this machine).
    CHECK(worker || index > 0);

    if (worker) {
      if (index < num_wake_ups_before_start_) {
        worker->WakeUp();
      } else {
        idle_workers_stack_.Push(worker);
      }
    }
  }
}

src/base/task/task_scheduler/scheduler_worker_pool_impl.cc 

SchedulerWorker*
SchedulerWorkerPoolImpl::CreateRegisterAndStartSchedulerWorkerLockRequired() {
  lock_.AssertAcquired();

  DCHECK_LT(workers_.size(), max_tasks_);
  DCHECK_LT(workers_.size(), kMaxNumberOfWorkers);
  // SchedulerWorker needs |lock_| as a predecessor for its thread lock
  // because in WakeUpOneWorker, |lock_| is first acquired and then
  // the thread lock is acquired when WakeUp is called on the worker.
  scoped_refptr<SchedulerWorker> worker = MakeRefCounted<SchedulerWorker>(
      priority_hint_,
      std::make_unique<SchedulerWorkerDelegateImpl>(
          tracked_ref_factory_.GetTrackedRef()),
      task_tracker_, &lock_, backward_compatibility_);

  if (!worker->Start(scheduler_worker_observer_))
    return nullptr;

  workers_.push_back(worker);
  DCHECK_LE(workers_.size(), max_tasks_);

  if (!cleanup_timestamps_.empty()) {
    detach_duration_histogram_->AddTime(TimeTicks::Now() -
                                        cleanup_timestamps_.top());
    cleanup_timestamps_.pop();
  }
  return worker.get();
}

src/base/task/task_scheduler/scheduler_worker_pool_impl.cc

运行光栅化线程:

void CategorizedWorkerPool::Run(
    const std::vector<cc::TaskCategory>& categories,
    base::ConditionVariable* has_ready_to_run_tasks_cv) {
  base::AutoLock lock(lock_);

  while (true) {
    if (!RunTaskWithLockAcquired(categories)) {
      // We are no longer running tasks, which may allow another category to
      // start running. Signal other worker threads.
      SignalHasReadyToRunTasksWithLockAcquired();

      // Exit when shutdown is set and no more tasks are pending.
      if (shutdown_)
        break;

      // Wait for more tasks.
      has_ready_to_run_tasks_cv->Wait();
      continue;
    }
  }
}

src/content/renderer/categorized_worker_pool.cc

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179637.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Laravel根据Ip获取国家,城市信息

    Laravel根据Ip获取国家,城市信息

    2021年10月23日
    380
  • 增长思维和增长黑客_黑客手册中文版

    增长思维和增长黑客_黑客手册中文版原书:《增长黑客手册——如何用数据驱动爆发式增长》点击图片可放大查看(放大后上下滑动查看)

    2022年9月17日
    1
  • 什么是Web 2.0——下一代软件的设计模式和商业模式 (全文翻译—1 博客版序)

    什么是Web 2.0——下一代软件的设计模式和商业模式 (全文翻译—1 博客版序)这篇文章,是经O’Reilly公司的TimO’Reilly先生授权后,进行全文翻译、出版的。包括:杂志节选版和网络全文版。转载:请遵循CC版权,保留原文作者和翻译作者信息,以及文章链接。感谢:互联网周刊的李洋提供了许多建议。几个文章版本链接:英文原文:http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/

    2022年7月21日
    13
  • 已安装的实例怎么删除_如何删除数据库实例

    已安装的实例怎么删除_如何删除数据库实例1.事件问题描述考虑到整个项目组的需求,我将PLC博图V16卸载,然后重新下载安装博图V15.1,然而因为在删除前博图V16时没有删除干净,安装博图V15.1导致出现以下问题:请删除SQLServer的”WinCC”实例,因为在卸载”WinCCProfessional”或”WinCCRuntimeProfessional”之后,该实例仍然存在于TIAPortal.2.解决方案…

    2022年10月2日
    2
  • Qt面试题整理

    Qt面试题整理1、Qt信号槽机制的优势(1)类型安全。需要关联的信号和槽的签名必须是等同的,即信号的参数类型和参数个数同接收该信号的槽的参数类型和参数个数相同。不过,一个槽的参数个数是可以少于信号的参数个数的,但缺少的参数必须是信号参数的最后一个或几个参数。如果信号和槽的签名不符,编译器就会报错。(2)松散耦合。信号和槽机制减弱了Qt对象的耦合度。激发信号的Qt对象无需知道是哪个对象的哪个槽需要接收它发出的…

    2022年6月25日
    95
  • 漫谈C语言及如何学习C语言

    漫谈C语言及如何学习C语言云风最近写了一篇博客《C语言的前世今生》。作为长期使用C语言开发网络游戏服务器的程序员,云风是有理由写这样一篇文字,不过还是感觉谈的不够深入,C语言在业界使用的现状没有怎么描写,有些意犹未尽。在这里想

    2022年8月3日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号