网页光栅化_光栅净化

网页光栅化_光栅净化资料: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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java中Scanner 的用法/ Scanner怎么使用

    Java中Scanner 的用法/ Scanner怎么使用Java中要想输入时便要用到Scanner首先在使用之前导入util包要想通过控制台进行输入,首先要构造一个Scanner对象,它附属于”标准输入流Scannerin=newScanner(System.in);现在我们就可以使用Scanner类的各种方法了使用Scanner读取字符串/整数/浮点数importjava.util.Scanner;//需要导入util包S…

    2022年7月20日
    14
  • pycharm 2021.11.3 激活码[最新免费获取][通俗易懂]

    (pycharm 2021.11.3 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1M3Q9SD5XW-eyJsaWNlbnNlSWQi…

    2022年3月28日
    163
  • css animation动画(css3动画分享)

    css3小动画,实在是丰富了前端展示页面的效果。虽然IE8不兼容(爱兼容不兼容,奏是这么傲娇)。但是在谷歌,火狐表现都没差。今天就介绍一个css3动画小插件,分分钟满足你实现各种妖魔化动画效果。1.需要引入css文件:animate.css2.引入js文件:wow.min.js3.找到页面中需要添加动画的元素添加class;比如:wowfadeInRightanimatedan…

    2022年4月15日
    64
  • 头部公司的Robotaxi何时能拿掉安全员?

    头部公司的Robotaxi何时能拿掉安全员?今天想聊聊Robotaxi。聊这个话题的起因是今年7月上旬,汽车之心走访了上海、广州和深圳三地,深入体验了滴滴、小马智行、文远知行、元戎启行和AutoX这5家自动驾驶公司的…

    2022年5月5日
    50
  • /etc/fstab文件_将etc目录挂载到

    /etc/fstab文件_将etc目录挂载到第一列到六列是设备或分区挂载点文件类型default是挂载类型dump系统故障dump内存信息到硬盘fsck检查磁盘坏道等defaults表示挂载类型,rw,suid.dev,exec

    2022年8月3日
    6
  • 什么是kit_django4.0

    什么是kit_django4.0#介绍ImageKit是用于处理图像的Django应用程序。如果需要从原图上生成一个长宽为50×50的图像,则需要ImageKit。ImageKit附带了一系列图像处理器,用于调整大小和裁剪等常见

    2022年7月31日
    4

发表回复

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

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