微信 7.0.3 事故 Postmortem

:joy:还好你们没抛弃我们啊,太TN的坑了:sob:

辛苦了,年后发版本

哎呀,才注意到这个问题,我说这两天的活跃怎么掉了一千多么,也不知道现在改还能不能来得及过审!!!

mark
请问creator V1.9.3的版本也是按照以上处理吗
@panda

按照上面提供的方式修复之后,一些老旧机型升级到微信7.0.3后截图分享直接闪退,一般第一次成功,多试几次之后就闪退了。没升级到7.0.3是没有问题的,打开性能监控没有发现异常。文字越多的地方越容易触发截图闪退。引擎版本是2.1.0。@panda。截图代码


    capture() {
        //截图初始化
        let texture = new cc.RenderTexture();
        let gl = cc.game._renderContext;
        // this.shareCard 是要截图的节点
        texture.initWithSize(this.shareCard.width, this.shareCard.height, gl.STENCIL_INDEX8);
        this.cam.targetTexture = texture;
        let width = texture.width;
        let height = texture.height;
        if (!this.ifCard) {
            this.ifCard = true;
            this.shareActionStart();
        }
        if (cc.sys.platform == cc.sys.WECHAT_GAME && this.nowShare) {
            this.shareCard.active = true;
            this.nowShare = false;

            this.cam.render();
            let shareData = {
                width: width,
                height: height,
                Pixels: texture.readPixels(),
                title: "连胜挑战分享"
            }
           // 实际截图分享,该方法的实现在下面
            app.recordShareController.cameraShare(shareData, () => {
                console.warn(`am`, this.cam.containsNode(cc.find(`Canvas`)))
                this.scheduleOnce(() => {
                    this.shareCard.active = false;
                    this.nowShare = true;
                },1)  
                app.shareController.shareGameMission(core.constants.hd.missionShareType.challengeShare)
            });
        }
    }

cameraShare(shareData, cb){
        let config = app.cfg.get("config_other")
        let wechatShare = config.shareConfig;
        let canvas = wx.createCanvas();
        let ctx = canvas.getContext('2d');
        canvas.width = cc.view.getCanvasSize().width;
        canvas.height = cc.view.getCanvasSize().height;

        let rowBytes = shareData.width * 4;
        for (let row = 0; row < shareData.height; row++) {
            let srow = shareData.height - 1 - row;
            let imageData = ctx.createImageData(shareData.width, 1);
            let start = srow*shareData.width*4;
            for (let i = 0; i < rowBytes; i++) {
                imageData.data[i] = shareData.Pixels[start+i];
            }
            ctx.putImageData(imageData, 0, row);
        }

        canvas.toTempFilePath({
            x: 0,
            y: 0,
            width: shareData.width,
            height: shareData.height,
            destWidth: 500,
            destHeight: 400,
            success:(res) => {     
                core.dispatch("rank.ui.resetPosition");
                console.warn("分享截图路径:", res);
                //self.wxShare();
                let msg = {      
                    title: wechatShare.shareInfo.title,
                    imageUrl: res.tempFilePath
                }

                let newSpreader = app.utilController.getNewSpreader();
                if (newSpreader && newSpreader !== "") {
                    msg.query = `action=share&newSpreader=${newSpreader}`;
                }

                wx.shareAppMessage(msg);
            },
            fail(res){
                console.error("截图失败原因:", res, res.errMsg);
                core.dispatch("rank.ui.resetPosition");
            },
            complete(){
                console.warn("cameraShare done1", cc.winSize.width, cc.winSize.height)
                cb()
                console.warn("cameraShare done2", cc.winSize.width, cc.winSize.height)
            }
          })
    }

1.9版本只需要按上面适配下,画面模糊的问题。卡顿的问题,微信已经通过热更解决了

卡顿什么时候解决了? 线上还是卡的啊

你是哪个版本啊?

请问一下,问题4现在有没有持续在跟微信沟通啊。

微信那边论坛里看了下,给的回复都是看这边的帖子的解决方案。
然而这边给的回复又是等微信处理。

现在重度点的游戏上微信卡的没有用户体验啊。

日活每天都再掉,卡顿反馈依然有。相当难受。这个帖子能同步下官方跟进的最新进展吗

cocos 这态度感人啊,远好于egret和laya,有这样的团队,不管解没解决问题都让开发者心里一暖

1赞

mark

我们是1.9.2版本,也是掉帧严重,尤其是播放动画的时候。请问有别的解决方案吗?(按2.0.7的方案,1.9.2版本/libs/engine/ 文件夹里没有DeviceMotionEvent.js文件)

我们一直在和微信保持紧密沟通,我们在尽我们所能进行优化。不过由于在微信上我们的引擎只能以 JS 的形态运行,很多底层(C++)部分不受控制,目前优化起来难度比较大,我们正在反复尝试。

1赞

就cocos团队解决问题的态度,比别的好太多了,顶!

膜拜~~~

先隐藏子域就好了,子域问题我们这边优化不了,不过微信最近也在完善当中,可能就快要官方修复了!

V2.0.8也是掉帧严重,卡顿

我们1.9.2也是卡顿严重,子域排行榜是自己原生实现的,而且不打开子域,也是同样卡顿。

目前导致卡顿的核心原因就是 texImage2D 这个 API,这个 API 会在子域更新时(每帧),TTF / 系统字体 Label 内容更新时触发。在部分安卓机型(华为貌似比较严重)会导致卡顿,如果一帧内发生变化的 TTF / 系统字体 Label 数量很多,可能会非常卡。

目前的解决方案:

  1. 在有限字符集(数字和部分有限文字)内的 Label 内容更新,使用 v2.0.9 的 Label CacheMode 更改为 CHAR 即可
  2. 无限字符集(比如对话)的情况下无解
  3. 更改 TTF 和系统字体为 BMFont 也可以彻底根治问题(对于低版本引擎如果不升级到 2.0.9 只能采用这个方法)
  4. 减少子域的使用

同时微信也在积极寻找优化方案,相信会在近期有更新