技术引领翻新,用“芯”构建生态,第一期龙芯生态论坛于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层,对下层屏蔽了平台差别,为最大水平地复用现有稳固代码提供了技术根底。
上面对新的输入法软件架构进行阐明。如下图。
Platform层:集中形象实现了平台相干的局部,包含UI绘制、音讯循环、零碎信息等性能,屏蔽了各平台的差别,为下层提供了对立的操作接口。Foundation层:该层为根底性能层,为下层提供了根底通用性能及UI元素。本层分为CommonLib与UILib两局部,其中通用库为根底性能库,次要实现ini及XML解析、加解密、容器、锁、认证等根底性能;UI库为UI提供了根底UI元素,包含图片、字体、画布、定时器、窗口及各类控件。输入法逻辑层:因为底层曾经解决了平台差别,因而本层大量复用了搜狗输入法原有稳固运行的输入法逻辑。本层分为输出逻辑层和UI逻辑层两局部,输出逻辑层包含语音输入、物理键盘输入、手写输入、虚构键盘输入、小语种及多语言输出等输出逻辑;UI逻辑层次要包含搜狗输入法的UI的窗口界面,包含写作窗口、软件盘、状态栏等。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、迁徙过程中遇到的问题&解决方案Windows平台文件系统中门路分隔符是反斜线(\),Linux的门路分隔符是斜线(/),另外Linux文件系统的文件门路名称辨别大小写,而Windows并不辨别,这些问题都须要留神。基于以上起因,输入法所有C++代码中include的头文件都应用斜线进行门路分隔,避免在不同零碎中编译出错。对立应用UTF-8字符编码。UTF-8编码的劣势:兼容英文的 ASCII编码,因为英文字符是罕用字符,因而应用UTF-8编码比UTF-16,UTF-32等编码节俭空间,另外UTF-8编码无字节序问题,其余多字节编码存在大端、小端编码值的差别。6、 迁徙前期遇到的问题&解决方案实现迁徙中期的工作后,输入法就能够失常运行了,但仅能够失常运行还远远不够,搜狗输出是要提供极致的输出体验,因而在迁徙前期须要在运行流畅性及用户体验等方面进行优化、调试。上面分享两个迁徙前期的问题。
手写输入呈现卡顿:输出笔画越多,卡顿越显著。例如下图,红框局部手写输入区域,经剖析,产生卡顿的起因为UI刷新逻辑,原有的刷新逻辑为全量刷新,例如“大家好”三个字,书写过程中的每一笔都会进行UI刷新,随着笔画的增多,刷新就会呈现卡顿。找到了问题起因,采取的解决办法为递增式刷新,即只绘制有变动的局部,如图,写“大家好”的“好”字的最初一笔“子”时,只有最初一笔的“子”进行绘制,其余笔画以及控件并不会从新绘制,大大晋升了绘制效率,改良后手写的晦涩度大幅晋升。
属性设置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/