Browse Source

chatgui: add diagnostic logging for Windows emoji animation bug investigation

topo_upd
Evgeny 2 months ago
parent
commit
fe18c454e2
  1. 3
      tools/chatgui/src/emojipanel.cpp
  2. 7
      tools/chatgui/src/lottieicon.cpp
  3. 10
      tools/chatgui/src/messagelist.cpp

3
tools/chatgui/src/emojipanel.cpp

@ -3,6 +3,7 @@
#include "emojitabbar.h" #include "emojitabbar.h"
#include "animtimer.h" #include "animtimer.h"
#include "lottieicon.h" #include "lottieicon.h"
#include <cstdio>
#include <QPushButton> #include <QPushButton>
#include <QScrollArea> #include <QScrollArea>
#include <QTabWidget> #include <QTabWidget>
@ -34,6 +35,8 @@ public:
if (data.type == EmojiType::Animation) { if (data.type == EmojiType::Animation) {
setMouseTracking(true); setMouseTracking(true);
m_icon = AnimTimer::instance()->icon(data.animPath); m_icon = AnimTimer::instance()->icon(data.animPath);
fprintf(stderr, "[DIAG EmojiBtn] btn=%p path=%s m_icon=%p\n",
(void*)this, qPrintable(data.animPath), (void*)m_icon);
m_timer.setInterval(33); m_timer.setInterval(33);
connect(&m_timer, &QTimer::timeout, this, [this]() { connect(&m_timer, &QTimer::timeout, this, [this]() {
if (m_icon && m_icon->isValid()) { if (m_icon && m_icon->isValid()) {

7
tools/chatgui/src/lottieicon.cpp

@ -2,6 +2,7 @@
#include <rlottie_capi.h> #include <rlottie_capi.h>
#include <zlib.h> #include <zlib.h>
#include <cstring> #include <cstring>
#include <cstdio>
static QByteArray unpackGzip(const QByteArray &data) { static QByteArray unpackGzip(const QByteArray &data) {
if (data.isEmpty()) return {}; if (data.isEmpty()) return {};
@ -35,15 +36,21 @@ static QByteArray unpackGzip(const QByteArray &data) {
LottieIcon::LottieIcon(const QByteArray &tgsData) { LottieIcon::LottieIcon(const QByteArray &tgsData) {
QByteArray json = unpackGzip(tgsData); QByteArray json = unpackGzip(tgsData);
fprintf(stderr, "[DIAG LottieIcon] this=%p tgsSize=%d jsonSize=%d jsonEmpty=%d\n",
(void*)this, (int)tgsData.size(), (int)json.size(), (int)json.isEmpty());
if (json.isEmpty()) return; if (json.isEmpty()) return;
m_jsonData = json; m_jsonData = json;
m_anim = lottie_animation_from_data(m_jsonData.constData(), "", ""); m_anim = lottie_animation_from_data(m_jsonData.constData(), "", "");
fprintf(stderr, "[DIAG LottieIcon] this=%p m_anim=%p jsonHead=%.60s\n",
(void*)this, (void*)m_anim, m_jsonData.constData());
if (!m_anim) return; if (!m_anim) return;
lottie_animation_get_size(m_anim, &m_w, &m_h); lottie_animation_get_size(m_anim, &m_w, &m_h);
m_totalFrames = (int)lottie_animation_get_totalframe(m_anim); m_totalFrames = (int)lottie_animation_get_totalframe(m_anim);
m_frameRate = lottie_animation_get_framerate(m_anim); m_frameRate = lottie_animation_get_framerate(m_anim);
fprintf(stderr, "[DIAG LottieIcon] this=%p frames=%d size=%zux%zu\n",
(void*)this, m_totalFrames, m_w, m_h);
if (m_totalFrames <= 0) m_totalFrames = 1; if (m_totalFrames <= 0) m_totalFrames = 1;
m_valid = true; m_valid = true;
} }

10
tools/chatgui/src/messagelist.cpp

@ -16,6 +16,7 @@
#include <QScrollBar> #include <QScrollBar>
#include <QApplication> #include <QApplication>
#include <QDebug> #include <QDebug>
#include <cstdio>
#include <vector> #include <vector>
#include <memory> #include <memory>
@ -104,11 +105,18 @@ MessageList::MessageList(DbManager* db, QWidget *parent)
if (e.type == EmojiType::Animation && !e.animPath.isEmpty()) { if (e.type == EmojiType::Animation && !e.animPath.isEmpty()) {
QFile f(e.animPath); QFile f(e.animPath);
if (f.open(QIODevice::ReadOnly)) { if (f.open(QIODevice::ReadOnly)) {
auto icon = std::make_unique<LottieIcon>(f.readAll()); QByteArray raw = f.readAll();
auto icon = std::make_unique<LottieIcon>(raw);
fprintf(stderr, "[DIAG register] path=%s fileOpen=1 rawSize=%d iconPtr=%p iconValid=%d\n",
qPrintable(e.animPath), (int)raw.size(),
(void*)icon.get(), (int)icon->isValid());
if (icon->isValid()) { if (icon->isValid()) {
AnimTimer::instance()->registerIcon(e.animPath, icon.get()); AnimTimer::instance()->registerIcon(e.animPath, icon.get());
s_icons.push_back(std::move(icon)); s_icons.push_back(std::move(icon));
} }
} else {
fprintf(stderr, "[DIAG register] path=%s fileOpen=0\n",
qPrintable(e.animPath));
} }
} }
} }

Loading…
Cancel
Save