网页光栅化_光栅净化

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


相关推荐

  • axis2调用webservice_apache许可

    axis2调用webservice_apache许可下面是一个service.xml        WebService例子           com.axis2webservice_test.HelloServiceNew                             

    2025年11月9日
    2
  • 伪静态规则写法RewriteRule-htaccess详细语法使用

    伪静态规则写法RewriteRule-htaccess详细语法使用伪静态实际上是利用PHP把当前地址解析成另一种方法来访问网站,要学伪静态规则的写法,要懂一点正则一、正则表达式教程有一个经典的教程:正则表达式30分钟入门教程常用正则如下:.换行符以外的所有字符\w

    2022年7月4日
    22
  • MATLAB 数学应用 微分方程 时滞微分方程 具有常时滞的DDE「建议收藏」

    MATLAB 数学应用 微分方程 时滞微分方程 具有常时滞的DDE「建议收藏」本文讲述了如何使用dde23对具有常时滞的DDE(时滞微分方程)方程组求解。方程组为:y1′(t)=y1(t−1)y’_1(t)=y_1(t−1)y1′​(t)=y1​(t−1)y2′(t)=y1(t−1)+y2(t−0.2)y’_2(t)=y_1(t-1)+y_2(t-0.2)y2′​(t)=y1​(t−1)+y2​(t−0.2)y3′(t)=y2(t)y’_3(t)=y_2(t)y3′​(t)=y2​(t).t≤0的历史解函数是常量y1(t)=y2(t)=y3(t)=1y_1(t)=y

    2022年9月28日
    3
  • 离散数学在计算机科学中的应用论文(集合论在计算机的应用)

    自从我们学院进行软件工程认证后,期末考试的专业课全部是大题。这次离散数学的最后一题是:利用本学期学到的离散数学的知识阐释其在一个软件工程中的应用。下面说说离散数学的应用。离散数学在数据结构中的应用数据结构中将操作对象间的关系分为四类:集合、线性结构、树形结构、图状结构或网状结构。数据结构研究的主要内容是数据的逻辑结构,物理存储结构以及基本运算操作。其中逻辑结构和基本运算操作来源于离散

    2022年4月17日
    118
  • ubuntu 自动挂起_ubuntu 的挂起与休眠

    ubuntu 自动挂起_ubuntu 的挂起与休眠待机计算机将目前的运行状态等数据存放在内存 关闭硬盘 外设等设备 进入等待状态 此时内存仍然需要电力维持其数据 但整机耗电很少 恢复时计算机从内存读出数据 回到挂起前的状态 恢复速度较快 一般笔记本在电池无故障且充满的情况下可以支持这种挂起数小时甚至数天 依具体机型有差别 其他名称 Suspend STR SuspendToRAM 挂起 挂起到内存休眠计算机将目前的运行状态等数据存

    2025年10月11日
    3
  • Cannot declare class app\home\controller\Cases because the name is already in use

    Cannot declare class app\home\controller\Cases because the name is already in use

    2021年10月12日
    47

发表回复

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

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