MacOS环境-手写操作系统-20-图层叠加优化

简介: 文章介绍了通过优化图层叠加技术,解决鼠标移动导致大量窗口重绘、消耗CPU资源的问题。通过只重绘鼠标移动影响的区域,以及改进文字显示机制,显著提升了系统性能。修改后的代码包括sheet_refreshsub和sheet_slide函数,以及showString函数,实现了更高效的窗口更新和文字绘制。摘要由CSDN通过智能技术生成

图层叠加优化

1.简介

在前几节 我们使用窗体图层叠加技术 解决了窗体鼠标移动时 破坏其他窗体界面的问题


但同时 也引入了新的问题


当鼠标移动时 内核会将所有窗口重新绘制


如果当前系统打开的窗口很多 假设有几十上百个


那么鼠标动一下 就重新绘制上百个窗口


这对cpu资源的消耗就会非常大 整个系统的性能就会被拖垮


由此 我们需要优化内核对窗口更新重绘的设计 降低不必要的损耗


解决方案


我们现在的鼠标 占据的窗口大小是16x16 也就是256个像素


按照现在内核的重绘机制 只要鼠标稍微移动一下 就需要对整个画面进行刷新


也就是重新绘制320x200 = 64000 个像素点


其实只要重新绘制鼠标移动的相关区域就可以了


例如 鼠标从原来坐标点(0,0) 移动到坐标点(1,1)


那么内核只要重绘区域[(0,0), (16,16)] 和 [(1,1), (17,17)] 即可


2.代码

为此 新添加了一个绘制函数

void sheet_refreshsub(struct SHTCTL *ctl, int vx0, int vy0, int vx1, int vy1) {
    int h, bx, by, vx, vy;
    unsigned char *buf, c, *vram = ctl->vram;
    struct SHEET *sht;
    for (h = 0; h <= ctl->top; h++) {
        sht = ctl->sheets[h];
        buf = sht->buf;
        for (by = 0; by < sht->bysize; by++) {
            vy = sht->vy0 + by;
            for (bx = 0; bx < sht->bxsize; bx++) {
                vx = sht->vx0 + bx;
                if (vx0 <= vx && vx < vx1 && vy0 <= vy && vy < vy1) {
                    c = buf[by * sht->bxsize + bx];
                    if (c != sht->col_inv) {
                        vram[vy * ctl->xsize + vx] = c;
                    }
                }
            }
        }
    }
}

这个函数功能就只对每个窗体绘制局部区域 该区域的左上角是(vx0,vy0),右下角是(vx1, vy1)


接着我们改进一下原来的sheet_silde函数 这个函数意义在于窗口移动后重新绘制


现在我们把它改成刷新窗口移动前后所占据的两个区域既可:


void sheet_slide(struct SHTCTL *ctl, struct SHEET *sht, int vx0, int vy0) {
    int old_vx0 = sht->vx0, old_vy0 = sht->vy0;
    sht->vx0 = vx0;
    sht->vy0 = vy0;
    if (sht->height >= 0) {
         sheet_refreshsub(ctl, old_vx0, old_vy0, old_vx0 + sht->bxsize, old_vy0 + sht->bysize);
         sheet_refreshsub(ctl, vx0, vy0, vx0+sht->bxsize, vy0+sht->bysize);
    }
}


第一次调用sheet_refreshsub 为的是刷新窗体移动前的区域


第二次调用sheet_refreshsub 是根据窗体移动后的坐标 重新绘制窗体


还有一处需要改进的是文字的显示


原来我们显示文字时 同样是需要把所有窗口重新绘制一次


还有就是我们的文章只能绘制在桌面背景上


现在我们有了图层的概念 因此我们可以把文字显示机制改进一下


(1)改进一是只对文章所占据的区域进行刷新


(2)改进二是文字可以绘制到给定的图层上 这样文章就可以绘制到指定的窗体 而不再只限制于桌面


代码如下


void showString(struct SHTCTL *shtctl ,struct SHEET *sht, int x, int y, char color, unsigned char *s ) {
    int begin = x;
    for (; *s != 0x00; s++) {
       showFont8(sht->buf, sht->bxsize, x, y,color, systemFont+ *s * 16);
       x += 8;
    }
    sheet_refresh(shtctl, sht, begin, y, x , y + 16); 
}


输入参数中的sht对应要绘制字符串的窗口图层


调用的sheet_refresh目的就是仅仅更新文字所占据的区域


有了上面的改进后 虽然我们的系统在外在表现上 没有明显的变化


但实际上 性能已经有了上千倍的提升


3.编译运行

我们已经有了打包工具 所以现在打包要简单的多


直接make


接着java


记得


Process process = Runtime.getRuntime().exec("/usr/local/bin/nasm -o kernel.bat kernel.asm");
    readProcessOutput(process);


最后img装载运行

目录
相关文章
|
6月前
|
传感器 人工智能 物联网
HarmonyOS NEXT~鸿蒙操作系统功耗优化特性深度解析
本文深入解析了华为鸿蒙(HarmonyOS)操作系统的功耗优化特性,涵盖低功耗设计原理、核心技术及实际应用效果。通过与Android对比,展现其在待机功耗、CPU调度效率和内存占用上的优势。文章重点阐述分布式任务调度、微内核架构及智能感知技术,并针对智能穿戴、物联网和智能手机等场景优化进行分析,同时为开发者提供优化建议。未来,鸿蒙将探索AI预测性管理等新技术,进一步提升能效表现。
1629 30
|
7月前
|
关系型数据库 虚拟化 UED
Omnissa Horizon Windows OS Optimization Tool 2503 - Windows 系统映像优化工具
Omnissa Horizon Windows OS Optimization Tool 2503 - Windows 系统映像优化工具
304 7
Omnissa Horizon Windows OS Optimization Tool 2503 - Windows 系统映像优化工具
|
6月前
|
缓存 人工智能 架构师
龙蜥社区走进中国农业大学,共探“AI+生命科学” 操作系统优化实践
“AI+生命科学”这一跨学科领域的巨大潜力与重要意义。
|
8月前
|
弹性计算 运维 安全
优化管理与服务:操作系统控制平台的订阅功能解析
本文介绍了如何通过操作系统控制平台提升系统效率,优化资源利用。首先,通过阿里云官方平台开通服务并安装SysOM组件,体验操作系统控制平台的功能。接着,详细讲解了订阅管理功能,包括创建订阅、查看和管理ECS实例的私有YUM仓库权限。订阅私有YUM仓库能够集中管理软件包版本、提升安全性,并提供灵活的配置选项。最后总结指出,使用阿里云的订阅和私有YUM仓库功能,可以提高系统可靠性和运维效率,确保业务顺畅运行。
|
7月前
|
Dart 开发工具 Android开发
在macOS系统上配置Flutter环境的步骤
在macOS系统上配置Flutter环境的步骤
892 62
|
安全 搜索推荐 Android开发
移动应用与系统:探索开发趋势与操作系统优化策略####
当今数字化时代,移动应用已成为日常生活不可或缺的一部分,而移动操作系统则是支撑这些应用运行的基石。本文旨在探讨当前移动应用开发的最新趋势,分析主流移动操作系统的特点及优化策略,为开发者提供有价值的参考。通过深入剖析技术创新、市场动态与用户需求变化,本文力求揭示移动应用与系统协同发展的内在逻辑,助力行业持续进步。 ####
246 9
|
6月前
|
Kubernetes Cloud Native 区块链
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
225 0
|
7月前
|
人工智能 安全 Anolis
|
8月前
|
弹性计算 监控 安全
实测阿里云操作系统控制台:功能、诊断与优化
阿里云操作系统(AliOS)是阿里巴巴专为物联网和智能设备开发的操作系统,提供高效、安全、智能化的解决方案。本文介绍了如何开通和使用阿里云的云服务器ECS,包括注册、选择操作系统、创建用户及授权等步骤。通过控制台,用户可以实时监控设备状态、管理组件、进行性能诊断,并优化资源使用。掌握这些功能有助于提升系统管理和数据处理能力,满足物联网场景的多样化需求。建议进一步丰富系统健康指标和观测功能,以提供更好的用户体验。
500 24
|
9月前
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
561 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡

热门文章

最新文章

推荐镜像

更多