乐趣区

关于龙芯:干货应用迁移|搜狗输入法在龙芯平台上的适配与应用

技术引领翻新,用“芯”构建生态,第一期龙芯生态论坛于 2021 年 3 月 12 日(周五)隆重开讲!龙芯生态论坛作为龙芯生态建设的重要技术交换窗口,将汇聚龙芯资深技术专家及行业生态搭档精英,继续发展行业建设成绩及技术分享流动,为凋敝龙芯生态、推动技术创新,贡献力量。

作为生态资源建设中的重要内容,龙芯架构下的利用迁徙备受关注。目前基于龙芯架构,已构建起了残缺的适配体系,内容涵盖操作系统、中间件及各类应用软件,输入法工具作为常用软件也成为龙芯架构利用迁徙适配的重要内容。享有“国民输入法”美誉、采纳经典 C /C++ 语言研发的搜狗输入法,目前已实现龙芯架构下的迁徙适配,正服务于党政企业、高等院校及泛滥终端用户。

本次流动邀请龙芯中科资深工程师韩广以及搜狗输入法资深开发工程师王宇航两位老师,围绕龙芯架构下 C /C++ 类利用迁徙技术根底及搜狗输入法企业级利用迁徙案例,从实践到实际,分享技术教训,分析迁徙过程中的技术问题,率领大家一窥利用迁徙技术全貌。

以下内容为流动速记

分享主题:搜狗输入法在龙芯平台上的适配与利用

分享嘉宾:搜狗资深高级开发工程师 王宇航

目前就任于搜狗输入法事业部。从事跨平台搜狗输入法的研发工作,爱好各种跨平台技术,致力于为输入法用户提供极致的输出体验。

注释如下

1、我的项目背景

本次分享的主题的是搜狗输入法在龙芯平台上的适配与利用, 接下来次要从以下几个方面开展: 我的项目的背景和介绍, 目前的适配成绩, 迁徙门路和后续布局.

搜狗成立于 2003 年,搜狗月沉闷用户数仅次于 BAT,是中国用户规模第四大互联网公司。搜狗成立至今经验 6 次冲破,一直的成长,成长的背地是一直冲破翻新的谋求。在中国,提到输入法首先会想到搜狗输入法,搜狗输入法在 2006 年一经公布就迅速占领市场,目前搜狗输入法在 APP 榜单排名第三,沉闷用户 8.2 亿,市场份额占到 86%。

搜狗输入法秉承为用户提供极致的输出体验,每一次更新都会给用户带来不同的输出体验。2014 年公布 linux 输入法,前面的迭代速度也是一直的放慢。2020 年 1 月搜狗输入法推出全新的企业版 1.0,冲破了只适配传统的 x86,同时适配的还有 arm 以及 mips 多架构,并且反对五笔。

2、适配成绩

搜狗输入法在龙芯平台上的适配成绩,目前搜狗输入法对支流的硬环境以及外围的输出场景已达到 100% 的适配。

  • 在操作系统方面:信创畛域,占支流的 UOS 以及麒麟操作系统齐全适配。
  • Cpu 架构方面,龙芯架构曾经齐全适配
  • 在 linux 发行版中的两个支流包管理器:rpm 和 deb 这两种安装包的格局,搜狗输入法曾经齐全反对
  • 从输入法性能维度看,根底输出的拼音输入,五笔输出,英文输出,小语种输出 100% 反对
  • 扩大输出方面:虚构键盘输入语音输入,以及辅助性能的属性设置曾经迁徙实现实现 100% 反对

3、搜狗输入法迁徙门路

  • 迁徙准则:迁徙速度快, 迁徙成果好.
  • 后期:对搜狗输入法对平台架构进行梳理和设计.
  • 中期:三个阶段:编译,调试和部署,部署胜利就能够胜利运行.
  • 前期:运行胜利不意味着迁徙胜利,搜狗输入法秉承为用户提供极致的输出体验。在实现部署后,须要对输入法的晦涩度,性能做进一步的验证,调试,测试,调优等,从而达到最好的成果。

上面将从迁徙后期、中期、前期三个阶段进行介绍。

4、迁徙后期遇到的问题 & 解决方案

迁徙后期,对输入法软件进行了分层设计,形象出与平台相干的性能,对下层屏蔽平台差别,实现输入法原有逻辑的最大复用。

此前,搜狗输入法只运行在 Windows 零碎上,合乎 TSF 输入法框架,而龙芯架构只运行 Linux 零碎,因而搜狗输入法须要对 Linux 零碎进行适配并接入 Linux 零碎支流的 Fctix 输入法框架。为了适配全新的 Fctix 框架,并达到“速度快、成果好”的迁徙指标,从新对输入法软件进行了架构设计,形象出与平台相干的 Platform 层,对下层屏蔽了平台差别,为最大水平地复用现有稳固代码提供了技术根底。

上面对新的输入法软件架构进行阐明。如下图。

  1. Platform 层:集中形象实现了平台相干的局部,包含 UI 绘制、音讯循环、零碎信息等性能,屏蔽了各平台的差别,为下层提供了对立的操作接口。
  2. Foundation 层:该层为根底性能层,为下层提供了根底通用性能及 UI 元素。本层分为 CommonLib 与 UILib 两局部,其中通用库为根底性能库,次要实现 ini 及 XML 解析、加解密、容器、锁、认证等根底性能;UI 库为 UI 提供了根底 UI 元素,包含图片、字体、画布、定时器、窗口及各类控件。
  3. 输入法逻辑层:因为底层曾经解决了平台差别,因而本层大量复用了搜狗输入法原有稳固运行的输入法逻辑。本层分为输出逻辑层和 UI 逻辑层两局部,输出逻辑层包含语音输入、物理键盘输入、手写输入、虚构键盘输入、小语种及多语言输出等输出逻辑;UI 逻辑层次要包含搜狗输入法的 UI 的窗口界面,包含写作窗口、软件盘、状态栏等。
  4. SDK 层:作为输入法和零碎输入法框架的桥梁,SDK 层屏蔽了不同输入法框架间的差别,为输入法的逻辑层提供了稳固对立的接口,实现了对现有逻辑的高复用,为又好又快地迁徙提供了松软的根底。

上面将介绍的是 Linux 平台上,搜狗输入法和 Fctix 输入法框架以及各利用之间的过程关系。见下图。

图片图右下方为 Linux 中 Fctix 输入法框架,该框架为 C / S 架构,是 Linux 零碎中独立运行的过程。

图片左半部分为 Linux 中运行的各种应用程序,包含 GTK、Qt 及 X Window 应用程序。各应用程序与 Fctix 输入法框架之间通过 XIM 协定进行通信,例如键盘按键,Fcitx 收到键盘按键音讯后,会依照以后选中的输入法,调用相应的输入法插件,因而在 Linux 零碎中搜狗输入法实现了一个 Fctix 框架的插件运行在 Fctix 输入法框架中。

搜狗输入法插件被 Fcitx 调用后,通过音讯队列(MessageQueue)进行过程间调用,调用到搜狗输入法的服务端(service),音讯队列传输的具体数据应用 ProtoBuf 进行序列化与反序列化,并实现了数据打包后的信息。输入法的 service 被调用后会将数据传递给搜狗输入法的 SDK,依照 SDK 中蕴含的各种输出逻辑进行解决,处理结果再通过音讯队列(MessageQueue)返回给 Fctix 插件,Fcitx 再通过 XIM 协定返回给各应用程序,实现输出流程。

实现整体的框架设计之后,就能够发展理论的迁徙工作了,随之也进入到了迁徙中期。迁徙中期,在编译、调试、部署不同阶段也遇到了不同的问题,次要包含开发环境的构建比较复杂、编码调试工具应用不太不便、短少软件运行依赖。

具体来看一下,迁徙中期遇到的理论问题及解决方案。因为须要进行跨平台的构建,选用了 cmake 作为工具链,然而在某些平台上面临 cmake、gcc 工具链的缺失,那么就须要龙芯或 OS 厂商提供工具链。

在编码阶段,咱们团队对立了编码工具,因为 VSCode 目前在其官网上还未提供 MIPS 架构的安装包,VSCode 无奈应用,因而抉择了 Qt Creator 这一轻量级的 IDE 作为代替工具,之所以抉择 Qt Creator,次要因其对 Qt 的开发调试比拟敌对,尤其对于 Qt 的数据结构,例如罕用的 QString、QRect 等数据结构可能显示其外部信息,比非 Qt 出品的 IDE 应用更加不便。

部署时可能存在运行时依赖缺失的问题,则须要由龙芯或 OS 厂商提供相应的运行时依赖软件包。

5、迁徙过程中遇到的问题 & 解决方案

  1. Windows 平台文件系统中门路分隔符是反斜线(\),Linux 的门路分隔符是斜线(/), 另外 Linux 文件系统的文件门路名称辨别大小写,而 Windows 并不辨别,这些问题都须要留神。基于以上起因,输入法所有 C ++ 代码中 include 的头文件都应用斜线进行门路分隔,避免在不同零碎中编译出错。
  2. 对立应用 UTF- 8 字符编码。UTF- 8 编码的劣势:兼容英文的 ASCII 编码,因为英文字符是罕用字符,因而应用 UTF- 8 编码比 UTF-16,UTF-32 等编码节俭空间,另外 UTF- 8 编码无字节序问题,其余多字节编码存在大端、小端编码值的差别。

6、迁徙前期遇到的问题 & 解决方案

实现迁徙中期的工作后,输入法就能够失常运行了,但仅能够失常运行还远远不够,搜狗输出是要提供极致的输出体验,因而在迁徙前期须要在运行流畅性及用户体验等方面进行优化、调试。上面分享两个迁徙前期的问题。

  1. 手写输入呈现卡顿:输出笔画越多,卡顿越显著。例如下图,红框局部手写输入区域,经剖析,产生卡顿的起因为 UI 刷新逻辑,原有的刷新逻辑为全量刷新,例如“大家好”三个字,书写过程中的每一笔都会进行 UI 刷新,随着笔画的增多,刷新就会呈现卡顿。找到了问题起因,采取的解决办法为递增式刷新,即只绘制有变动的局部,如图,写“大家好”的“好”字的最初一笔“子”时,只有最初一笔的“子”进行绘制,其余笔画以及控件并不会从新绘制,大大晋升了绘制效率,改良后手写的晦涩度大幅晋升。

  1. 属性设置 app 启动慢:通过使用性能剖析工具 - 火焰图,进行问题定位。火焰图的剖析后果如下图。火焰图 Y 轴为调用栈(调用方向:从下向上),X 轴为采样点的记录。因为 CPU 中个别会有 PMU 单元记录程序运行过程中硬件应用状况,采集点数越多,代表该函数运行工夫越长。须要留神的是 X 轴不是时长,只示意采样的数量。图中蓝色局部,其占用的时长超过 app 启动时长的 40%,依据函数名称能够断定,该函数次要实现界面创立,初步确定属性设置 app 启动的性能瓶颈为界面创立,再联合性能日志工具,确定了问题起因确为 UI 页面创立耗时较长。经评估,采纳了延时创立的办法解决该问题。属性设置的 UI 页面比较复杂,一共为 7 个,且页面间能够任意切换,但同一时刻只会显示一个页面,基于这种应用形式,在属性设置程序启动时,只创立用户可见的页面,待程序启动实现后在后盾再逐渐创立其余页面,既晋升了用户体验,又保障了性能的残缺,改良后启动效率进步了 40%。

搜狗输入法不会满足于现有问题,后续还会有更多布局。在产品性能方面,打算增加符号大全、语音合成、手写反对字符等性能,在根底品质打磨上也将持续致力,一直晋升输出准确率,进步语音及手写辨认的速度,从而让用户享受到更为极致的用户体验。

问答环节:

Q1:当初是否可能提供龙芯架构下的 deb 包?

A1:目前还未提供,请网友继续关注。

Q2:搜狗输入法反对阿拉伯语?

A2:目前反对的小语种有几十种,须要明确网友关注的是手写输入还是语音输入。

Q3:搜狗输入法和 jetbrains 全家桶抵触的问题解决得怎么样?

A3:目前在踊跃沟通解决中。

Q4:搜狗输入法在平安方面的设计有哪些?

A4:搜狗输入法中提供了加解密、认证模块;输入法安装包做了签名,在加载时会进行签名验证,另外也提供了接口级别的加密认证,通过这些技术手段来实现搜狗输入法的安全性。

Q5:利用 cmake gcc 以及内部依赖的 PC 端的软件迁徙,其必要性体现在哪里?

A5:cmake 构建零碎是跨平台的,通常在 Windows 上应用 VC,但 VC 不能在非 Windows 平台应用,因而思考到跨平台要求,采纳了 cmake 构建零碎,因为 cmake 既能够生成 Linux 零碎下的 makefile 等工程管理文件,也能够生成 Windows 零碎下 VC 开发工程,从而实现了构建工具的跨平台化。

龙芯技术博客:
https://blog.csdn.net/loongnix?spm=1010.2135.3001.5343&type=blog

龙芯技术社区:
https://loongson.cloud.csdn.net/

退出移动版