From a76e33884c55bbd5db7e512b7687210cc3f635cf Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Thu, 21 Feb 2013 19:09:55 -0800 Subject: Start hooking up damage, shell script to test. It's still pretty broken and I need to grok how damage and moveRect play together. Avoid allocations inside onDraw(). Change-Id: I0fca467439178d902c4d11ff1523a0ec25c2dd39 --- jni/com_android_terminal_Terminal.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'jni') diff --git a/jni/com_android_terminal_Terminal.cpp b/jni/com_android_terminal_Terminal.cpp index 7545a35..e195913 100644 --- a/jni/com_android_terminal_Terminal.cpp +++ b/jni/com_android_terminal_Terminal.cpp @@ -34,6 +34,8 @@ #include +#define USE_TEST_SHELL true + namespace android { /* @@ -79,7 +81,9 @@ public: size_t write(const char *bytes, size_t len); + int flushDamage(); int resize(short unsigned int rows, short unsigned int cols); + int getCell(VTermPos pos, VTermScreenCell* cell); int getRows() const; @@ -245,7 +249,8 @@ Terminal::Terminal(jobject callbacks, int rows, int cols) : mVts = vterm_obtain_screen(mVt); vterm_screen_enable_altscreen(mVts, 1); vterm_screen_set_callbacks(mVts, &cb, this); - vterm_screen_set_damage_merge(mVts, VTERM_DAMAGE_SCROLL); + // TODO: switch back to VTERM_DAMAGE_SCROLL? + vterm_screen_set_damage_merge(mVts, VTERM_DAMAGE_CELL); vterm_screen_reset(mVts, 1); } @@ -304,7 +309,12 @@ int Terminal::run() { } char *shell = "/system/bin/sh"; //getenv("SHELL"); +#ifdef USE_TEST_SHELL + char *args[4] = {shell, "-c", "x=1; while true; do echo \"stop echoing yourself! ($x)\"; x=$(( $x + 1 )); sleep 0.5; done", NULL}; +#else char *args[2] = {shell, NULL}; +#endif + execvp(shell, args); fprintf(stderr_save, "Cannot exec(%s) - %s\n", shell, strerror(errno)); _exit(1); @@ -334,6 +344,11 @@ size_t Terminal::write(const char *bytes, size_t len) { return ::write(mMasterFd, bytes, len); } +int Terminal::flushDamage() { + vterm_screen_flush_damage(mVts); + return 0; +} + int Terminal::resize(short unsigned int rows, short unsigned int cols) { ALOGD("resize(%d, %d)", rows, cols); // TODO: wait for resize event to propegate back from shell? @@ -375,6 +390,11 @@ static jint com_android_terminal_Terminal_nativeRun(JNIEnv* env, jclass clazz, j return term->run(); } +static jint com_android_terminal_Terminal_nativeFlushDamage(JNIEnv* env, jclass clazz, jint ptr) { + Terminal* term = reinterpret_cast(ptr); + return term->flushDamage(); +} + static jint com_android_terminal_Terminal_nativeResize(JNIEnv* env, jclass clazz, jint ptr, jint rows, jint cols) { Terminal* term = reinterpret_cast(ptr); @@ -445,6 +465,7 @@ static jint com_android_terminal_Terminal_nativeGetCols(JNIEnv* env, jclass claz static JNINativeMethod gMethods[] = { { "nativeInit", "(Lcom/android/terminal/TerminalCallbacks;II)I", (void*)com_android_terminal_Terminal_nativeInit }, { "nativeRun", "(I)I", (void*)com_android_terminal_Terminal_nativeRun }, + { "nativeFlushDamage", "(I)I", (void*)com_android_terminal_Terminal_nativeFlushDamage }, { "nativeResize", "(III)I", (void*)com_android_terminal_Terminal_nativeResize }, { "nativeGetCellRun", "(IIILcom/android/terminal/Terminal$CellRun;)I", (void*)com_android_terminal_Terminal_nativeGetCellRun }, { "nativeGetRows", "(I)I", (void*)com_android_terminal_Terminal_nativeGetRows }, -- cgit v1.2.3